Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Размер кода в Keil
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Radiokrot
Есть вопрос - в Keil, указывая в параметрах проекта 'Use Cross-Module Optimization', при многократной компиляции размер кода меняется (напр. компилим проект, получаем размер Code=64984; не меняя ничего в проекте ещё раз его компилим, получаем Code=64994 (разница в 10 байт)), настораживает... Не в курсе, с чем связано, и влияет ли на работу проекта в целом? ))
Goofy
Особенно это заметно когда делаешь перестройку проекта целиком.
По опыту ничего не менялось - факт.
Однако к вопросу о сути этого явления присоеденяюсь.
aaarrr
Эта опция включает использование линкером feedback-файла. Каждая следущая компиляция при этом использует результаты предыдущей. По-идее, после второй сборки размер кода меняться не должен.
AlexandrY
Замечал раньше такое, но вот в последнем Keil-е такой фокус как-то не удается.

Однако заметил, что Keil любит при включенной опции "one ELF section per function" располагать программные модули в памяти по алфавиту
Из-за этого соседние функции могут быть раскиданы хаотично по всей памяти и из-за этого появляются многочисленные вставки с указателями длинных переходов. В результате код вместо того чтобы сжаться может разрастись на пару десятков байт.
Даже при отключенной этой опции но оставшейся "Use cross-module optimization" все равно хочет расположить что-то по алфавиту.
Может с этим связаны колебания размеров.
Хотя при перестановке секций тож должны быть колебания из-за выравниваний структур данных в ro секциях.

Цитата(aaarrr @ Mar 15 2009, 14:53) *
Эта опция включает использование линкером feedback-файла. Каждая следущая компиляция при этом использует результаты предыдущей. По-идее, после второй сборки размер кода меняться не должен.
defunct
Цитата
при многократной компиляции размер кода меняется

Для релиза всегда делайте clean build.
Это кстати не проблема Keil'а, это "фича" ARM'a. RVDS и SDT ведут себя также.
aaarrr
Цитата(defunct @ Mar 16 2009, 04:23) *
Для релиза всегда делайте clean build.

Интересно, а feedback'и clean удаляет? Если да, то совет вредный sad.gif
defunct
Цитата(aaarrr @ Mar 16 2009, 15:16) *
Интересно, а feedback'и clean удаляет? Если да, то совет вредный sad.gif

Совет не вредный в любом случае, разработчик (другой) который возможно будет исследовать кордамп после сбоя должен иметь возможность собрать идентичную прошивку. Clean build даст всегда идентичную сборку.

насчет feedback'ов, если с их наличием код растет, а не уменьшается, то какой в них смысл?
aaarrr
Цитата(defunct @ Mar 16 2009, 19:48) *
Совет не вредный в любом случае, разработчик (другой) который возможно будет исследовать кордамп после сбоя должен иметь возможность собрать идентичную прошивку. Clean build даст всегда идентичную сборку.

ИМХО, в этом случае нужно делать полный архив релиза, а не пытаться создать идентичную прошивку (какими-нибудь __DATE__ и __TIME__ она все равно может отличаться).

Цитата(defunct @ Mar 16 2009, 19:48) *
насчет feedback'ов, если с их наличием код растет, а не уменьшается, то какой в них смысл?

Ну, 10 байт - это еще не растет, хотя сам факт, конечно, настораживает.
defunct
Цитата(aaarrr @ Mar 16 2009, 19:03) *
ИМХО, в этом случае нужно делать полный архив релиза, а не пытаться создать идентичную прошивку (какими-нибудь __DATE__ и __TIME__ она все равно может отличаться).

тага в системе контроля версий недостаточно? скачал, собрал debug/release сборки и получил требуемые файлы.
Сборка одним и тем же армовским тулчейном с clean build'а всегда дает идентичный (bitexact) код! проверено.
aaarrr
Если в коде используется макросы __DATE__ __TIME__ (ну вот нравятся они мне), то bitexact уже не получится.

Релиз лучше сохранять в построенном виде, при этом можно немедленно воспользоваться отладчиком, не вникая в особенности строения проекта или мозга разработчика.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.