Подправил библиотеку для LCD, теперь она поддерживает контроллеры ks0066 и hd44780. Фишка в чем. Библиотека для hd44780 может работать и с ks0066, а вот библиотека для ks0066 с контроллером hitachi уже не работает.  У этих контроллеров есть некоторое отличие в инициализации при использовании 4-ех разрядной шины. Вообщем я добавил несколько строк кода и заключил их в директивы условной компиляции, чтобы можно было выбирать тип контроллера. Код для hitachi чуть "потолще", а если будет использоваться контроллер ks0066 зачем нам лишние 40 байт кода. 

    Стандартный подход к написанию программы для микроконтроллера сводится к использованию бесконечного цикла (суперлупа), внутри которого непрерывно опрашиваются флаги и запускаются те или иные функции. Этот подход вполне оправдан для написания небольших программ, но при превышении определенного порога сложности, такая программа становится громоздкой, непонятной и запутанной. Этой ситуации можно избежать, если на начальной стадии разработки оценить сложность программы и выбрать для нее более подходящую форму организации.
   Самой ближайшей альтернативой является событийная система. Она не такая тяжеловесная, как операционная, и в то же время позволяет организовать программу в довольно стройную и понятную конструкцию, которую легко наращивать и изменять. 
Найджел Джонс

   Одна из наименее используемых, но  потенциально наиболее полезных директив препроцессора Си - это #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 ничем не отличается от обычных сообщений компилятора об ошибках. 
Nigel Jones

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

ПРАВИЛО #1 – ФИГУРНЫЕ СКОБКИ

   Блок программы, идущий после ключевых слов  if, else, switch, while, do и for следует всегда окружать фигурными скобками ({}), даже если он содержит только одиночные или пустые операторы.

// Не следует так делать…
if (timer.done)
   // Одиночному оператору нужны скобки!       
   timer.control = TIMER_RESTART;

// А вот так правильно ...
while (!timer.done)
{
   // Даже пустой оператор должен быть окружён скобками.
}

Страница 12 из 19