31.08.2013, 17:59
|
|
Заблокирован
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
|
Определение количества слов при упаковывании массива
Доброго времени суток!
Помогите решить задачу, мозг отказывается работать.
Делаю контроллер для технологического процесса.
Имеется массив 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.
|
|
|
|
31.08.2013, 18:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
|
Re: Определение количества слов при упаковывании массива
#define MAX_AL_WORDS (MAX_ALARMS -1)/ 16 + 1
|
|
|
|
31.08.2013, 18:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
|
Re: Определение количества слов при упаковывании массива
kosmos440o, в сложных макросах можно и буст использовать.
Я так мучился когда-то с двойными функциями (функция для GPU и ее копия для CPU, в зависимости от условий компиляции используется либо одна из них, либо обе поочередно — если GPU ресурсов не хватает, вызывается функция для CPU), чтобы не запутаться, начал делать на макросах объявления функций. Но возникла проблема с переменным количеством аргументов. Я спросил на stackexchange, а тем временем родил свой велосипед. А мне чуть позже предложили лаконичный вариант на бустовском препроцессоре! Т.к. это — препроцессор, его можно даже для микроконтроллерных программ использовать.
__________________
Смерть бандеровской мразоте!
|
|
|
|
31.08.2013, 18:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
|
Re: Определение количества слов при упаковывании массива
А вообще - печально встречать подобные реализации решения в коммерческих проектах. Надеюсь ваш - не коммерческий. Или даже если и таковой, то такая ошибка всего лишь причина того, что пора отдохнуть.
Эдди, а может попроще надо быть ? Я думаю мало кто понял что вы только что сказали. Я - точно не понял. Вообще ничего
|
|
|
|
31.08.2013, 18:46
|
|
Заблокирован
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
|
Re: Определение количества слов при упаковывании массива
Сообщение от Wiza_
|
#define MAX_AL_WORDS (MAX_ALARMS -1)/ 16 + 1
|
Спасибо, ларчик, оказывается, просто открывался!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:26.
|
|