Перейти к содержанию
    

Как уменьшите файл прошивки?

Всем привет!

у меня такая проблема.

Есть программа для микроконтроллера atmega8, Написана на Си,файл прошивки после AVRStudio+WinAVR занимает 11 кб,а память мк-8 кб.Можно ли както по хитрому прошить, не урезая код? :wacko:

 

Спасибо заранее!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет!

у меня такая проблема.

Есть программа для микроконтроллера atmega8, Написана на Си,файл прошивки после AVRStudio+WinAVR занимает 11 кб,а память мк-8 кб.Можно ли както по хитрому прошить, не урезая код? :wacko:

А какое рассширение у Вашей прошивки ?

Если .hex, то Ваши 11Кб легко влезут в 8 ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какое рассширение у Вашей прошивки ?

Если .hex, то Ваши 11Кб легко влезут в 8 ;)

 

Да.именно *.hex

не влезают.

может это тогда программатор глючит?:(((тогда проверю завтра поменьше программу

 

собссно,а почему должны влезть? ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да.именно *.hex

не влезают.

может это тогда программатор глючит?:(((тогда проверю завтра поменьше программу

 

собссно,а почему должны влезть? ;)

Потому что в hex файле каждый байт данных представлен двумя символами, которые занимают 1 байт каждый. Значит, hex файл размером 11К байт содержит не более 5.5К байт данных.

 

Кроме того, память программ у AVR имеет размер не байт, а больше. Значит, hex файл размером 11К байт должен уложиться примерно в 4К слов памяти программ.

 

WinAVR - это GCC, а гнутый С всегда давал довольно "рыхлый" скомпилированный код, раза в полтора-два больше по объему чем коммерческие компиляторы. Для начала попробуйте скомпилировать на WinAVR с максимальным уровнем оптимизации -O3. Если не получится, переходите на IAR, вряд ли кто-то делает С компилятор для AVR лучше них.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала попробуйте скомпилировать на WinAVR с максимальным уровнем оптимизации -O3

лучше -Os

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала попробуйте скомпилировать на WinAVR с максимальным уровнем оптимизации -O3.

НИ В КОЕМ СЛУЧАЕ!

Это рекомендация годится только для форисрования перехода на IAR :-)

GCC с опцей -O3 как минимум

- инлайнит всё что можно насколько можно, т.е. даже не объявленные как inline и довольно крупные функции с очень большой степенью вероятности будут вставлены по месту

- разворачивает циклы - если цикл с известным на момнет компиляции числом проходов, то при небольшом числе проходов вообще может всё в линию вытянуть. При неизвестном - запросто сгенерирует два тела цикла подряд, проверит на чётность предел, отдельно для нечётного выполнит одно тело, а счётчик для удвоенного тела поделит на два.

Т.е. девиз ключа -O3 - "быстродействие любой ценой, размер не играет значения".

 

Для AVR, как уже было сказано, в 98% случаев оптимальный результат с ключиком -Os.

Полезно дать ключик --relax линкеру (-Wl,--relax если для линковки вызывается gcc, а не ld). Линкер при этом

делает анализ кода, заменяет длинные переходы/вызовы на короткие и комбинацию call/ret на jmp.

 

При желании ещё ужать размер за счёт скорости к -Os можно добавить -mcall-prologues.

 

 

p.s. IAR действительно даёт более компактный код, но не в два раза точно. И в полтора врядли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

WinAVR - это GCC, а гнутый С всегда давал довольно "рыхлый" скомпилированный код, раза в полтора-два больше по объему чем коммерческие компиляторы. Для начала попробуйте скомпилировать на WinAVR с максимальным уровнем оптимизации -O3. Если не получится, переходите на IAR, вряд ли кто-то делает С компилятор для AVR лучше них.
А посыпать голову пеплом не боитесь ?

Если что, примеры перешлем... (эта я насчет рыхлости кода...)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для AVR, как уже было сказано, в 98% случаев оптимальный результат с ключиком -Os.

А, значит, запамятовал. Давно уже с GCC дел не имел, да и соприкасался очень бегло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...