Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 31.08.2013, 17:59  
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  
Wiza_
Почётный гражданин KAZUS.RU
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 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  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Определение количества слов при упаковывании массива

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

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

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

Эдди, а может попроще надо быть ? Я думаю мало кто понял что вы только что сказали. Я - точно не понял. Вообще ничего
Wiza_ вне форума  
Непрочитано 31.08.2013, 18:46  
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, время: 15:26.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot