GenaSPB 11 12 сентября, 2014 Опубликовано 12 сентября, 2014 · Жалоба Взято тут: 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 12 сентября, 2014 Опубликовано 12 сентября, 2014 · Жалоба включите lto, ещё меньше размер может быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 13 сентября, 2014 Опубликовано 13 сентября, 2014 · Жалоба Давно -flto -Os включено. Это уже крохи подбираются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 15 сентября, 2014 Опубликовано 15 сентября, 2014 · Жалоба О! Попробую, а то я уже стал думать, что всё, что новее 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 Может я чего-то не то творю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 15 сентября, 2014 Опубликовано 15 сентября, 2014 (изменено) · Жалоба Ну честно скажу, такую "простыню" я пробовал крайне давно засовывать в проект. Сейчас мои флаги выглядят так: 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 линкеру сказать. Изменено 15 сентября, 2014 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 16 сентября, 2014 Опубликовано 16 сентября, 2014 · Жалоба Ну честно скажу, такую "простыню" я пробовал крайне давно засовывать в проект. Сейчас мои флаги выглядят так: Это вы зря. Там есть воистину убойные ключи: 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: Я считаю, что имеет смысл сравнивать разные версии компиляторов на максимально возможной оптимизации (по скорости или объёму - кому что нужно). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 16 сентября, 2014 Опубликовано 16 сентября, 2014 (изменено) · Жалоба Добавил -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. Изменено 16 сентября, 2014 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 16 сентября, 2014 Опубликовано 16 сентября, 2014 · Жалоба Ещё раз перепробовал различные варианты комбинаций ключей, avr-gcc-4.7.2 остался не побеждён. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 16 сентября, 2014 Опубликовано 16 сентября, 2014 · Жалоба Понятно, что всё от проекта зависит... А пробовали без набора ключей? Только тот минимум, что и я использую? Как он на Вашем проекте? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 16 сентября, 2014 Опубликовано 16 сентября, 2014 · Жалоба Ещё раз перепробовал различные варианты комбинаций ключей, avr-gcc-4.7.2 остался не побеждён. Вы ключи сборки вашего проекта меняли, а newlib (или что там в gcc) в вашем проекте не используется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 16 сентября, 2014 Опубликовано 16 сентября, 2014 · Жалоба А пробовали без набора ключей? Только тот минимум, что и я использую? Как он на Вашем проекте?Пробовал конечно. Результат хуже чем с ключами (пробовал на нескольких проектах). Сравнивать просто так 4.7.2 vs 4.9.2 не вижу смысла. Мне интересен минимальный размер прошивки. Я уверен что любой проект смогу собрать компактнее на 4.7.2, чем на всех последующих и предыдущих версиях компилятора 4.х. Вы ключи сборки вашего проекта меняли, а newlib (или что там в gcc) в вашем проекте не используется?Используется: avrlibc libm libgcc. ИМХО, начиная с avr-gcc-4.7 он собирается с интеграцией в него части avrlibc, так что подменить без пересборки не выйдет. Самосборкой компилятора пока не увлекаюсь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 20 сентября, 2014 Опубликовано 20 сентября, 2014 · Жалоба Вспомнил одну "вкусность", которая кроме удобства ещё и компактности кода добавила, в 4.7 её кажется ещё не ввели - атрибуты для разных пространств памяти, при этом работа с памятью программ стала возможной без pgm_read_byte и других. В моих проектах это дало уменьшение кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 20 сентября, 2014 Опубликовано 20 сентября, 2014 · Жалоба Эта фишка появилась именно в 4.7. Пользуюсь. В своё время сам прикладывал руки к avr-libc и закоммитил интерфейс pgm_ххх_float в pgmspace.h ну ещё по мелочи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться