Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


Ответ
Опции темы

Определение количества слов при упаковывании массива

Непрочитано 31.08.2013, 17:59   #1
kosmos440o
Заблокирован
 
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
kosmos440o на пути к лучшему
По умолчанию Определение количества слов при упаковывании массива

Доброго времени суток!

Помогите решить задачу, мозг отказывается работать.

Делаю контроллер для технологического процесса.
Имеется массив unsigned char alarm[MAX_ALARMS], отображающий состояние аварий.
Этот массив для передачи по сети упаковывается в слова alarm_word[MAX_AL_WORDS](тип word), в каждом слове определённый бит отображает значение определённого элемента массива alarm[i] (0 или 1). Всё работает, только не могу в #define автоматически вычислить количество слов. В цикле или с условиями это решается без проблем, а в макросе хотелось бы попроще. Сделал несколько попыток, но есть ошибки.

Например, при определении:
#define MAX_ALARMS 32
#define MAX_AL_WORDS ((MAX_ALARMS-(MAX_ALARMS%16))/16+1)
количество слов вычисляется правильно, за исключением случаев, когда MAX_ALARMS кратно 16.
Реклама:
kosmos440o вне форума   Ответить с цитированием
Непрочитано 31.08.2013, 18:17   #2
Wiza_
Гражданин KAZUS.RUN
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 980
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
Wiza_ на пути к лучшему
По умолчанию Re: Определение количества слов при упаковывании массива

#define MAX_AL_WORDS (MAX_ALARMS -1)/ 16 + 1
Wiza_ вне форума   Ответить с цитированием
Сказали "Спасибо" Wiza_
kosmos440o (31.08.2013)
Непрочитано 31.08.2013, 18:22   #3
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Определение количества слов при упаковывании массива

kosmos440o, в сложных макросах можно и буст использовать.

Я так мучился когда-то с двойными функциями (функция для GPU и ее копия для CPU, в зависимости от условий компиляции используется либо одна из них, либо обе поочередно — если GPU ресурсов не хватает, вызывается функция для CPU), чтобы не запутаться, начал делать на макросах объявления функций. Но возникла проблема с переменным количеством аргументов. Я спросил на stackexchange, а тем временем родил свой велосипед. А мне чуть позже предложили лаконичный вариант на бустовском препроцессоре! Т.к. это — препроцессор, его можно даже для микроконтроллерных программ использовать.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума   Ответить с цитированием
Непрочитано 31.08.2013, 18:32   #4
Wiza_
Гражданин KAZUS.RUN
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 980
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
Wiza_ на пути к лучшему
По умолчанию Re: Определение количества слов при упаковывании массива

А вообще - печально встречать подобные реализации решения в коммерческих проектах. Надеюсь ваш - не коммерческий. Или даже если и таковой, то такая ошибка всего лишь причина того, что пора отдохнуть.

Эдди, а может попроще надо быть ? Я думаю мало кто понял что вы только что сказали. Я - точно не понял. Вообще ничего
Wiza_ вне форума   Ответить с цитированием
Непрочитано 31.08.2013, 18:46   #5
kosmos440o
Заблокирован
 
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
kosmos440o на пути к лучшему
По умолчанию Re: Определение количества слов при упаковывании массива

Сообщение от Wiza_ Посмотреть сообщение
#define MAX_AL_WORDS (MAX_ALARMS -1)/ 16 + 1
Спасибо, ларчик, оказывается, просто открывался!
kosmos440o вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бортовой комп (почти) теперь и у меня (+) kd_Rash Микроконтроллеры, АЦП, память и т.д 79 11.08.2011 14:23
Как влияет мощность УМЗЧ на SPL (звуковое давление) tauP10 Аудиотехника 49 23.11.2010 14:05
Водка и как с ней бороться SerjT Отвлекитесь, эмбеддеры! 108 29.09.2009 21:25
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


Часовой пояс GMT +4, время: 06:59.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.