[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Особенность AVR в том, что почти все операции (логические, арифметические) возможны только с регистровым файлом. Поэтому все операции с переменными, находящимися в ОЗУ, требуют большого кол-ва байт кода: загрузить байт из ОЗУ в регистр(4 байта),
произвести операцию(2+ байт),
записать обратно в ОЗУ (4 байта).
Если внутри функции одна переменная используется несколько раз, то гораздо эффективнее в начале функции считать её в регистр (скопировать во временную переменную внутри функции). Работать с копией, а в конце функции сохранить в ОЗУ.
Это применимо только для AVR, например для MSP430 это не нужно.
Я года два назад писал прогу на AT90S8515 на IAR 1.41 с порядка 40-а менюшек. Сама структура меню заняла довольно мало места, больше всего пошло на редактор: почти во всех меню нажатием на три кнопки можно было редактировать значения параметров (поразрядно, с мерцанием редактируемой цифры). На это ушло порядка 2 кбайт.
Широко использовал float - его можно не боятся, у IAR-а он реализован очень хорошо (насчет CodeVision не знаю, не пробовал).
Ни printf ни sprintf никогда не применял, всегда использовал свои урезанные функции под конкретный случай.
Ну и прерывания лучше писать на ассемблере.
E-mail: info@telesys.ru