Как раскрутить Си-макросы

Опубликовано в рубрике "Статьи", 28.11.2010.
Тэги: , , автор:

Да, знаю, сложные Си-макросы – это очень плохо. Но, иногда, без них приходится писать такую кучу кода, что неизвестно, что лучше. Вот и мне понадобилось наваять макро-кодогенератор, вот такой (только не спрашивайте, зачем 🙂 ) —

1#define EXPORT_CLASS_FUNC_0(class_name, func_name) \
2 DevResult class_name ##_ ##func_name() { \
3 DevResult result; \
4 try { result = GetMyInstance()-›##func_name(); } \
5 catch(…) { return DEVRESULT_ERR; } \
6 return result; }

Но как увидеть, что он нагенерил? Оказывается, все просто. Для этого, запускаем cpp компилятор от Visual Studio со следующими ключами:

1cl.exe /P /C имя_файла.cpp

Он создаст файл имя_файла.i, куда положит исходный код с развернутыми макросами.

Обзор stm8

Опубликовано в рубрике "Статьи", 22.10.2010.
Тэги: , , , автор:

Когда я выбирал контроллер для очередной поделки, я наткнулся на резкий дефицит разного рода AVR’ок. Я начал искать, чем их заменить, и нашел stm8.

stm8 – это относительно новое семейство микроконтроллеров от компании STMicroelectronics. В нем воплощено чуть ли не все, чего можно ожидать от 8 битных чипов. Конечно-же, у каждого контроллера есть свои плюсы и свои минусы.

stm8s-discovery

Шаблоны проектирования (Design patterns)

Опубликовано в рубрике "Статьи", 15.09.2010.

Самое сложное в программировании – не набивание кода, а создание архитектуры программы. Удачные кусочки архитектур можно позаимствовать у других и применить в своих программах, такие кусочки называются “шаблонами проектирования”.

pattern

offsetof(s, m)

Опубликовано в рубрике "Статьи", 01.09.2010.
Тэги: , , , автор:

Если порыться по стандартным заголовочным фалам ANSI-C компилятора, то в файле stddef.h можно найти макрос offsetof()

Макрос offsetof() имеет тру-эмбеддерское объявление

1// у кейла
2#define offsetof(s, m) (size_t)&(((s *)0)-›m)
3
4// у IAR’а
5#define offsetof(T, m) (__INTADDR__((&((T *)0)-›m)))

Самое интересное, что несмотря на полезность этого макроса, он очень редко используется. Я и сам не знал о его существовании до сегодняшнего дня.

Протопотоки (protothreads)

Опубликовано в рубрике "Статьи", 20.07.2010.

Protothreads – очень удобная библиотека, реализующая аналог кооперативной ОС с очень маленькими затратами ресурсов (2 байта на поток!). Особенно она актуальна для небольших контроллеров и, собственно снимает извечный вопрос – пользоваться ОС или нет.

threads

Основные “фишки”

  • Очень маленькие затраты – достаточно всего два байта на поток
  • Библиотека написана на чистом C и C-препроцессоре без ассемблера и, поэтому, очень легко переносится
  • Выпускается под  BSD — лицензией