[an error occurred while processing this directive] [an error occurred while processing this directive]
Это точно: знание ассемблера, особенностей архитектуры МК и возможностей(кривоватостей) компилятора, вот залог успеха! И ещё советы...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Baser 10 мая 2002 г. 17:25
В ответ на: Путь простой - надо знать ассемблер. Тогда сможете оптимизировать прогу на С.(+) отправлено L.A. 10 мая 2002 г. 16:09

Особенность AVR в том, что почти все операции (логические, арифметические) возможны только с регистровым файлом. Поэтому все операции с переменными, находящимися в ОЗУ, требуют большого кол-ва байт кода: загрузить байт из ОЗУ в регистр(4 байта),
произвести операцию(2+ байт),
записать обратно в ОЗУ (4 байта).
Если внутри функции одна переменная используется несколько раз, то гораздо эффективнее в начале функции считать её в регистр (скопировать во временную переменную внутри функции). Работать с копией, а в конце функции сохранить в ОЗУ.
Это применимо только для AVR, например для MSP430 это не нужно.

Я года два назад писал прогу на AT90S8515 на IAR 1.41 с порядка 40-а менюшек. Сама структура меню заняла довольно мало места, больше всего пошло на редактор: почти во всех меню нажатием на три кнопки можно было редактировать значения параметров (поразрядно, с мерцанием редактируемой цифры). На это ушло порядка 2 кбайт.

Широко использовал float - его можно не боятся, у IAR-а он реализован очень хорошо (насчет CodeVision не знаю, не пробовал).

Ни printf ни sprintf никогда не применял, всегда использовал свои урезанные функции под конкретный случай.

Ну и прерывания лучше писать на ассемблере.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru