[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
В конце проекта на AT90S8515 стало не хватать памяти программ.
Уровень оптимизации в компиляторе был уже 9.
Решил заняться неблагодарным делом --- оптимизировать программу в соответствии с рекомендациями IAR из "AVR035: Efficient C Coding for
AVR". Выкроил примерно 260 байт FLASH. Скажу лишь, что на практике
некоторые их рекомендации работали в сторону увеличения размера
( например объявление глобальных переменных, как структур),
либо давали мизерный эффект. Это конечно же зависит ещё и от программы.
Но не в этом дело. Прикинул, что 260 байт должно мне на пару недостающих функций хватить. Но компилятор "кинул" меня. Дело вот в чём добавил я к проекту два новых файла. Функции из этих файлов я пока ещё не использую. Скомпилировал программу --- практически всё сэкономленное место исчезло. Замечу, что размер FLASH смотрю в .map файле. Ведь линкер не должен включать в исполняемый файл тела неиспользующихся функций! Но здесь ситуация прямо противоположная. Это что же получается, скажем драйвер (.с файл) для работы с какой-то микросхемой написан универсально и содержит 10 функций. В проекте используются только три, а линкер включает все 10 ?
Разъясните пожалуйста ситуацию.
С Уважением, Игорь Лапшин.
E-mail: info@telesys.ru