[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Проект делается на AVR AT90S8515. При его завершении стало катастрофически не хватать памяти программ. Решил заняться оптимизацией. Честно говоря неблагодарное это дело выкраивать по крохам с помощью оптимизации память программ. И главное --- это титанически рутинный процесс! Но так уж сложилось.
Далее поступил следующим образом: где можно перенёс все массивы flash char в EEPROM. Думал сэкономить ещё 500 байт FLASH. При этом пришлось заменить в проекте strcpy_P() нат свою strcpy_E(). Экономия оказалась значительно большей. Странно, ведь инструкция чтения FLASH LPM занимает всего 2 байта, а макросы _EEPUT() _EEGET() раскладываются на несколько команд, но факт на лицо. Что же IAR вписала в strcpy_P() ?
Далее, в проекте использую и printf() со спецификатором формата
_small_write. Попробовал закоментировать все строки с её вызовом ---
это ж надо свыше 800 байт освободилось.
В связи с этим просьба: может кто-то поделится эффективной реализацией
функции itoa(). Мне этого будет вполне достаточно.
С Уважением,
Игорь Лапшин
E-mail: info@telesys.ru