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

avr-gcc 4.9.2

Взято тут: http://netcologne.dl.sourceforge.net/proje...-12_mingw32.zip

 

gcc version 4.9.2 20140912 (prerelease) (GCC):

 

AVR Memory Usage

----------------

Device: atmega644pa

 

Program: 32754 bytes (50.0% Full)

(.text + .data + .bootloader)

 

Data: 936 bytes (22.9% Full)

(.data + .bss + .noinit)

 

 

gcc version 4.7.2 (AVR_8_bit_GNU_Toolchain_3.4.2_939):

 

AVR Memory Usage

----------------

Device: atmega644pa

 

Program: 32942 bytes (50.3% Full)

(.text + .data + .bootloader)

 

Data: 936 bytes (22.9% Full)

(.data + .bss + .noinit)

 

 

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


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

Давно -flto -Os включено. Это уже крохи подбираются.

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


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

О! Попробую, а то я уже стал думать, что всё, что новее 4.7.2 хуже в плане размера выходного файла...

Чуда не произошло: +100 с лишним байт на прошивке размером 14К со следующими опциями оптимизации компилятора и линкера.

    CFLAGS += -funsigned-char
    CFLAGS += -funsigned-bitfields
    CFLAGS += -fpack-struct
    CFLAGS += -fshort-enums
    CFLAGS += -fno-move-loop-invariants
    CFLAGS += -fno-optimize-sibling-calls
    CFLAGS += -fno-split-wide-types
    CFLAGS += -fno-tree-loop-optimize
    CFLAGS += -fno-tree-scev-cprop
    CFLAGS += -fno-tree-switch-conversion
    CFLAGS += -mcall-prologues
    CFLAGS += -mstrict-X 
    CFLAGS += -maccumulate-args
    CFLAGS += -mbranch-cost=0
    CFLAGS += -flto
    CFLAGS += -ffunction-sections
    CFLAGS += -fdata-sections
    CFLAGS += -mrelax

    LDFLAGS += -Wl,--gc-section -nodefaultlibs -lm -lgcc -lc

Может я чего-то не то творю?

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


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

Ну честно скажу, такую "простыню" я пробовал крайне давно засовывать в проект. Сейчас мои флаги выглядят так:

 

avr-gcc -mmcu=atmega644pa -Wall -gdwarf-2 -std=gnu99 -flto -DF_CPU=10000000UL -Os -fsigned-char -MD -MP -MT st7735.o -MF dep/st7735.o.d -c ../st7735.c

 

И не забыть -Os -flto линкеру сказать.

Изменено пользователем Genadi Zawidowski

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


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

Ну честно скажу, такую "простыню" я пробовал крайне давно засовывать в проект. Сейчас мои флаги выглядят так:

Это вы зря.

Там есть воистину убойные ключи:

CFLAGS += -mcall-prologues

CFLAGS += -mstrict-X

CFLAGS += -maccumulate-args

CFLAGS += -flto

CFLAGS += -ffunction-sections

CFLAGS += -fdata-sections

CFLAGS += -mrelax

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

Вторые два ключика появились в gcc-4.7.0 и тоже работают волшебно.

Собственно как и остальные.

 

У вас просто нет задачи уложить весьма функциональную прошивку в 8 или 16 килобайт для снижения себестоимости серийного изделия.

Поэтому вы и не используете всевозможные оптимизации.

 

И не забыть -Os -flto линкеру сказать.
Ну это разумеется:

%.elf: $(OBJ)
    @echo $(MSG_LINKING) $@
    $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)

 

PS: Я считаю, что имеет смысл сравнивать разные версии компиляторов на максимально возможной оптимизации (по скорости или объёму - кому что нужно).

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


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

Добавил -mstrict-X и -maccumulate-args - раздувает...

Device: atmega32

 

Program: 32842 bytes (100.2% Full)

(.text + .data + .bootloader)

 

Data: 880 bytes (43.0% Full)

(.data + .bss + .noinit)

Только -mstrict-X:

Device: atmega32

 

Program: 32466 bytes (99.1% Full)

(.text + .data + .bootloader)

 

Data: 880 bytes (43.0% Full)

(.data + .bss + .noinit)

Мой оригинальный вариант, что я приводил ранее:

Device: atmega32

 

Program: 32476 bytes (99.1% Full)

(.text + .data + .bootloader)

 

Data: 880 bytes (43.0% Full)

(.data + .bss + .noinit)

 

Насчет задач... В промышленных вариантах я бы не подставлялся под ограничение ПЗУ, так как развитие функциональности всегда возникает... и заполняет всю предоставленную память. Способ снижения себестоимости за счет процессора - на мой взгляд спорно. Тут можно и с каждой функцией индивидуально заняться, хотя это вопрос к взаимодействию с заказчиком. К примеру выяснилось, что использование резисторных сборок вместо отдельных деталей снижает стоимость сборки на станке. Общеизвестно, что трухольные компоненты тоже удорожают.

У вас просто нет задачи уложить весьма функциональную прошивку в 8 или 16 килобайт

Есть одна конструкция - радиолюбительское связное устройство SW2011..SW2013 в разных модификациях. Его автор собирает и рассылает с Украины. В трансивере стоит ATMEGA32. И всякие доработки программы должны оставить возможность перешить прошивку на новую не заменяя процессор. Программу для этого устройства делал я, вот и стараюсь утрамбовать. Косвенно, хорошая оптимизация -OS положительно и на производительности сказывается, разумеется за исключением таких способов как -mcall-prologues.

Изменено пользователем Genadi Zawidowski

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


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

Ещё раз перепробовал различные варианты комбинаций ключей, avr-gcc-4.7.2 остался не побеждён.

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


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

Понятно, что всё от проекта зависит... А пробовали без набора ключей? Только тот минимум, что и я использую? Как он на Вашем проекте?

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


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

Ещё раз перепробовал различные варианты комбинаций ключей, avr-gcc-4.7.2 остался не побеждён.

Вы ключи сборки вашего проекта меняли, а newlib (или что там в gcc) в вашем проекте не используется?

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


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

А пробовали без набора ключей? Только тот минимум, что и я использую? Как он на Вашем проекте?
Пробовал конечно. Результат хуже чем с ключами (пробовал на нескольких проектах). Сравнивать просто так 4.7.2 vs 4.9.2 не вижу смысла.

Мне интересен минимальный размер прошивки. Я уверен что любой проект смогу собрать компактнее на 4.7.2, чем на всех последующих и предыдущих версиях компилятора 4.х.

 

 

Вы ключи сборки вашего проекта меняли, а newlib (или что там в gcc) в вашем проекте не используется?
Используется: avrlibc libm libgcc. ИМХО, начиная с avr-gcc-4.7 он собирается с интеграцией в него части avrlibc, так что подменить без пересборки не выйдет.

Самосборкой компилятора пока не увлекаюсь...

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


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

Вспомнил одну "вкусность", которая кроме удобства ещё и компактности кода добавила, в 4.7 её кажется ещё не ввели - атрибуты для разных пространств памяти, при этом работа с памятью программ стала возможной без pgm_read_byte и других. В моих проектах это дало уменьшение кода.

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


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

Эта фишка появилась именно в 4.7.

Пользуюсь.

В своё время сам прикладывал руки к avr-libc и закоммитил интерфейс pgm_ххх_float в pgmspace.h ну ещё по мелочи.

 

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


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

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

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

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

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

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

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

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

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

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