Продолжаем разговор. Как я и обещал, выкладываю универсальный (в статике) способ, пока только вывода в порты.
Во первых, для пинов добавлены псевдонимы вида Pa0,...,Pa7;.... Pg0,...,Pg7.
Если кому мало - можно ещё добавить.
Во вторых добавлен класс PinList, которым можно пользоваться так:
Код:
|
typedef PinList‹Pa0, Pb1, Pc2, Pa3, Pb3, Pc3› pins;
pins::Write(someValue); |
В качестве параметров ему можно передать до 16 любых пинов на любом порте. Номер бита из записываемого значения соответствует номеру пина в списке. При выводе пины группируются по портам и в порт записывается сразу значение группы пинов.
Пример находится в прикреплённом архиве.
Предлагаю всем заинтересованным посмотреть этот пример и высказаться по поводу удобства использования и качества генерируемого кода.
Напоминаю, полную версию исходников можно найти
здесь.
ЗЫ. Класс PinList реализован с помощью злой и очень чёрной шаблонной магии
ЗЗЫ. проект AVR Studio/WinAVR.