реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Размер кода в Keil
Radiokrot
сообщение Mar 15 2009, 10:41
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 29-01-08
Пользователь №: 34 528



Есть вопрос - в Keil, указывая в параметрах проекта 'Use Cross-Module Optimization', при многократной компиляции размер кода меняется (напр. компилим проект, получаем размер Code=64984; не меняя ничего в проекте ещё раз его компилим, получаем Code=64994 (разница в 10 байт)), настораживает... Не в курсе, с чем связано, и влияет ли на работу проекта в целом? ))
Go to the top of the page
 
+Quote Post
Goofy
сообщение Mar 15 2009, 12:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 17-09-07
Из: Красноярск
Пользователь №: 30 600



Особенно это заметно когда делаешь перестройку проекта целиком.
По опыту ничего не менялось - факт.
Однако к вопросу о сути этого явления присоеденяюсь.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 15 2009, 12:53
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Эта опция включает использование линкером feedback-файла. Каждая следущая компиляция при этом использует результаты предыдущей. По-идее, после второй сборки размер кода меняться не должен.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 15 2009, 19:11
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Замечал раньше такое, но вот в последнем Keil-е такой фокус как-то не удается.

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

Цитата(aaarrr @ Mar 15 2009, 14:53) *
Эта опция включает использование линкером feedback-файла. Каждая следущая компиляция при этом использует результаты предыдущей. По-идее, после второй сборки размер кода меняться не должен.
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 16 2009, 01:23
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
при многократной компиляции размер кода меняется

Для релиза всегда делайте clean build.
Это кстати не проблема Keil'а, это "фича" ARM'a. RVDS и SDT ведут себя также.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 16 2009, 13:16
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(defunct @ Mar 16 2009, 04:23) *
Для релиза всегда делайте clean build.

Интересно, а feedback'и clean удаляет? Если да, то совет вредный sad.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 16 2009, 16:48
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

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

насчет feedback'ов, если с их наличием код растет, а не уменьшается, то какой в них смысл?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 16 2009, 17:03
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

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

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

Ну, 10 байт - это еще не растет, хотя сам факт, конечно, настораживает.
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 16 2009, 17:06
Сообщение #9


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

тага в системе контроля версий недостаточно? скачал, собрал debug/release сборки и получил требуемые файлы.
Сборка одним и тем же армовским тулчейном с clean build'а всегда дает идентичный (bitexact) код! проверено.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 16 2009, 17:38
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Если в коде используется макросы __DATE__ __TIME__ (ну вот нравятся они мне), то bitexact уже не получится.

Релиз лучше сохранять в построенном виде, при этом можно немедленно воспользоваться отладчиком, не вникая в особенности строения проекта или мозга разработчика.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.0142 секунд с 7
ELECTRONIX ©2004-2016