Найджел Джонс

   Одна из наименее используемых, но  потенциально наиболее полезных директив препроцессора Си - это #error. В этой статье мы рассмотрим пару интересных способов применения #error, которые пригодятся вам при разработке программного обеспечения для встраиваемых систем.

  Директива препроцессора #error относится к нововведениям Standart C (стандарт 1989 года). Синтаксис ее довольно простой:

#error <error message>

<error message> - может состоять из любого печатного текста и его даже не обязательно заключать в кавычки. Технически, сообщение можно опустить, однако особого смысла в этом нет.   

  Когда препроцессор Си встречает директиву #error, процесс компиляции останавливается и пользователю выдается сообщение. Обычно оно выглядит так:

Filename(line_number): Error! 
Ennnn: <error message>

Где Filename - это имя исходного файла, line_number – номер строки, где находится директива #error, и Ennnn – код ошибки компилятора. Таким образом, сообщение #error ничем не отличается от обычных сообщений компилятора об ошибках. 
   Вопросы организации программ встраиваемых систем довольно скудно освещены в отечественной литературе. Поэтому у начинающих программистов микроконтроллеров рано или поздно возникают проблемы при написании  больших проектов.
   Стандартный подход к построению микроконтроллерных программ сводится к использованию бесконечного цикла, внутри которого происходит опрос флагов, и вызываются разные функции. Однако, такая программа не наглядна, и ее сложно модифицировать.
   Организация программы в виде событийной системы (event driven system) лишена этих недостатков, позволяет реализовывать сложную логику, и не так “тяжеловесна” как операционные системы (RTOS). В этой статья мы разберемся с принципом ее работы и рассмотрим простой вариант ее реализации.
   Микроконтроллер может “общаться” с lcd  по 8-ми или 4-ех разрядной шине данных. Первый вариант более простой, поэтому мы с него и начали, второй посложнее, но позволяет сэкономить 4 вывода микроконтроллера.  
   Давайте разберемся чем отличается это подключение, и добавим в нашу библиотеку поддержку 4-ех разрядной шины.
   С помощью описанной в предыдущей статье простой библиотеки программных таймеров, можно легко организовать управление подсветкой LCD дисплея. Учитывая ее большое энергопотребление, неплохо бы включать подсветку только на время работы с устройством. Давишь на кнопки  - подсветка горит, перестаешь - она гаснет. Реализовать это можно следующим образом. Нажатие на любую кнопку - зажигает подсветку и запускает таймер. Пока таймер считает, нажатия на кнопки вызывают его перезапуск. Если в течении заданного времени ни одна кнопка не была нажата, таймер срабатывает и гасит подсветку.