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

 
 
 
Reply to this topicStart new topic
> avr-gcc 4.9.2, windows бинарники
Genadi Zawidowsk...
сообщение Sep 12 2014, 19:10
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Взято тут: 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)


Go to the top of the page
 
+Quote Post
smalcom
сообщение Sep 12 2014, 22:17
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



включите lto, ещё меньше размер может быть.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 13 2014, 17:02
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Давно -flto -Os включено. Это уже крохи подбираются.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 15 2014, 06:41
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Genadi Zawidowski @ Sep 13 2014, 21:02) *
О! Попробую, а то я уже стал думать, что всё, что новее 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
Может я чего-то не то творю?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 15 2014, 15:30
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



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

Цитата
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 - Sep 15 2014, 15:33
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 16 2014, 06:33
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Genadi Zawidowski @ Sep 15 2014, 19:30) *
Ну честно скажу, такую "простыню" я пробовал крайне давно засовывать в проект. Сейчас мои флаги выглядят так:

Это вы зря.
Там есть воистину убойные ключи:
Цитата
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: Я считаю, что имеет смысл сравнивать разные версии компиляторов на максимально возможной оптимизации (по скорости или объёму - кому что нужно).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 16 2014, 09:22
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Добавил -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 - Sep 16 2014, 09:37
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 16 2014, 10:27
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Genadi Zawidowski @ Sep 16 2014, 13:22) *
Ещё раз перепробовал различные варианты комбинаций ключей, avr-gcc-4.7.2 остался не побеждён.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 16 2014, 12:32
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Понятно, что всё от проекта зависит... А пробовали без набора ключей? Только тот минимум, что и я использую? Как он на Вашем проекте?
Go to the top of the page
 
+Quote Post
den_po
сообщение Sep 16 2014, 13:04
Сообщение #10


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

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Цитата(demiurg_spb @ Sep 16 2014, 14:27) *
Ещё раз перепробовал различные варианты комбинаций ключей, avr-gcc-4.7.2 остался не побеждён.

Вы ключи сборки вашего проекта меняли, а newlib (или что там в gcc) в вашем проекте не используется?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 16 2014, 13:23
Сообщение #11


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Genadi Zawidowski @ Sep 16 2014, 16:32) *
А пробовали без набора ключей? Только тот минимум, что и я использую? Как он на Вашем проекте?
Пробовал конечно. Результат хуже чем с ключами (пробовал на нескольких проектах). Сравнивать просто так 4.7.2 vs 4.9.2 не вижу смысла.
Мне интересен минимальный размер прошивки. Я уверен что любой проект смогу собрать компактнее на 4.7.2, чем на всех последующих и предыдущих версиях компилятора 4.х.


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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 20 2014, 11:08
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Вспомнил одну "вкусность", которая кроме удобства ещё и компактности кода добавила, в 4.7 её кажется ещё не ввели - атрибуты для разных пространств памяти, при этом работа с памятью программ стала возможной без pgm_read_byte и других. В моих проектах это дало уменьшение кода.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 20 2014, 13:30
Сообщение #13


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Genadi Zawidowski @ Sep 20 2014, 15:08) *
Эта фишка появилась именно в 4.7.
Пользуюсь.
В своё время сам прикладывал руки к avr-libc и закоммитил интерфейс pgm_ххх_float в pgmspace.h ну ещё по мелочи.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


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


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