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

Собсно сабж.

Попробовал пока ничего плохого не могу сказать. За выходные разберемся

Слито вместе avr & avr32. Прикольно. 275 метров

 

AVR-gcc 4.3.3

AVR32-gcc 4.3.2

Make 3.81 - наконец-то ! Или он уже давно там... не помню, ну да ладно.

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


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

Слито вместе avr & avr32. Прикольно. 275 метров

На официальном сайте на sourceforge версия занимает 29.9 MB

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


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

...

AVR-gcc 4.3.3

AVR32-gcc 4.3.2

...

А ваши отзывы?

Напишите хотя-бы как изменился размер собранных бинарников? (было/стало).

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


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

AVR32 GNU toolchain

 

Splint 3.1.2 Splint is a tool for statically checking C programs for security vulnerabilities and programming mistakes. Splint does many of the traditional lint checks. More powerful checks are made possible by additional information given in source code annotations.

 

New Device Support

 

Component Version Upgrades

 

На официальном сайте на sourceforge версия занимает 29.9 MB
Размер указанный _Pasha - это установленный столько занимает (278 МБ (291 557 454 байт)).

 

Напишите хотя-бы как изменился размер собранных бинарников? (было/стало).
Device: atmega128

20081205: 87924 bytes (67.1% Full);

Новый, 20100110: 87710 bytes (66.9% Full).

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


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

20081205: 87924 bytes (67.1% Full);

Новый, 20100110: 87710 bytes (66.9% Full).

А оптимизация-то какая при этом?

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


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

я тоже скачал официальный релиз и, как обычно (за последние 4 релиза), обратил внимание, что размер генерируемого бинарника (при полностью одинаковых исходных параметрах) увеличился... не на много, но все-таки возрос. я проверял на тестовом проекте - получил +10 байт (но и сам проект едва 2 килобайта перешагнул).

 

выходит, с каждым релизом все меньше и меньше шансов использовать всякие "недомерки" attiny13, attiny2xxx и т.п.... жалко...

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


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

...размер генерируемого бинарника (при полностью одинаковых исходных параметрах) увеличился...
А вы генерируемый код не сравнивали, за счет чего конкретно увеличение?

 

Я рабочие проекты попересобирал (только Си, ++ нету), и в итоге везде уменьшение размера кода: стабильно от 2 байт и больше (2 байта - разница в стартапе). Везде оптимизация по размеру, и

CFLAGS += -ffunction-sections

LDFLAGS += -Wl,--gc-sections
LDFLAGS += -Wl,--relax

Выше я писал 214 байт высвободилось. Сейчас еще один пересобрал - 270 байт освободилось!

D:\Projects_UPD\SA_application>avr-size _main.elf
   text    data     bss     dec     hex filename
   5294       4    1136    6434    1922 _main.elf

D:\Projects_UPD\SA_application>avr-size main.elf
   text    data     bss     dec     hex filename
   5024       4    1136    6164    1814 main.elf

Сравниваю генерируемый код, ибо интересно откуда... :cranky:

 

--

 

Просмотрел по-быстрому. Чудес нету :(

Функция с __attribute__((const)) static inline перестала инлайниться - функция из 12 команд, без пролога\эпилога; вероятно, с форсированием инлайна не прав я -- надо проверить в железе;

Еще одна просто static тоже перестала инлайниться - тут уже решение компилятора в обоих случаях, и мне пофиг;

Кое-где jmp заменен на rjmp, и небольшие оптимизации по использованию регистров (Z -> X), как следствие, возможно, изменений с функциями...

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

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


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

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


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

а как вы поступаете: ставите сразу несколько копий WinAVR? как можно с удобством тестировать разные сборки компилятора на одинаковых проектах? как быть с прописыванием путей? неудобно же... или я в танке?

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


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

а как вы поступаете: ставите сразу несколько копий WinAVR? как можно с удобством тестировать разные сборки компилятора на одинаковых проектах? как быть с прописыванием путей?
позаимствовано у ReAl: в makefile прописываем:
#TOOLSET = C:/WinAVR/20090313
TOOLSET = C:/WinAVR/20100110
TARGET = avr-
CC = $(TARGET)gcc
OBJCOPY = $(TARGET)objcopy
OBJDUMP = $(TARGET)objdump
SIZE = $(TARGET)size

# if TOOLSET variable set,
# add TOOLSET bin directory first in PATH    
ifneq ($(strip $(TOOLSET)),)
ifeq (,$(findstring;,$(PATH)))
  PATH := $(subst :,,/$(TOOLSET)/bin):$(PATH)
else
  PATH := $(subst /,\,$(TOOLSET)/bin);$(PATH)
endif
export PATH
endif

Дальше раскомментируем нужную строчку TOOLSET= и все собирается нужной версией.

 

 

Make 3.81 - наконец-то ! Или он уже давно там... не помню, ну да ладно.
Уже давно. Но с древней глючной msys-1.0.dll. На днях автор закрыл мою очередную (датированную 2008-10-02) просьбу в баг-трекере заменить эту dll на более свежую с резолюцией won't fix. Уже давно сделал себе рабочий комплект утилит непосредственно с их родины - проекта msys и утилиты из WinAVRa идут в сад сразу.

 

По качеству кода - по сравнению с 20090319 на двух проектах код на одном вырос, на втором существенно сократился. Размеры проектов - 1836->1854 (загрузчик) и 6042->5816 (приложение, мега8, С++, виртуальные функции). Работоспособность не проверял. Опции оптимизации для последнего (подбирались по минимальному коду для 20090313):

CFLAGS += -ffunction-sections 
CFLAGS += -fdata-sections
CFLAGS += -mcall-prologues

#CFLAGS += -fno-ivopts
CFLAGS += -fno-tree-scev-cprop 
CFLAGS += -fno-split-wide-types
CFLAGS += -fno-inline-small-functions

CFLAGS += --param inline-call-cost=0
#CFLAGS += -fno-reorder-blocks 
#CFLAGS += -fno-reorder-blocks-and-partition 
#CFLAGS += -fno-reorder-functions 
#CFLAGS += -fno-toplevel-reorder
CFLAGS += -fno-move-loop-invariants
#CFLAGS += -fno-unroll-loops
#CFLAGS += -fno-unroll-all-loops
#CFLAGS += --param max-unroll-times=0

Левое предупреждение "only initialized variables can be placed into program memory area" на плюсовых исходниках осталось. Баги 40112, 40013 остались.

Судя по рассылке - много правили в avr-libc. Имеет смысл переходить.

 

P.S. Заметил, что некорректно распаковал новую версию и сравнивал 20090313 с ней же. Исправил. Написаному выше теперь - верить.

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


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

а как вы поступаете: ставите сразу несколько копий WinAVR? как можно с удобством тестировать разные сборки компилятора на одинаковых проектах? как быть с прописыванием путей? неудобно же... или я в танке?

Я на флешке держу все используемые ГЦЦ - от MinGW до SDCC +несколько версий winAVR и yagarto. Выбор через makefile. Откатиться на предыдущую версию - одним # в начале строки выбора. Однако, 2009 стабильненький был. Ни разу не огорчил.

 

Уже давно сделал себе рабочий комплект утилит непосредственно с их родины - проекта msys и утилиты из WinAVRa идут в сад сразу.

То же самое. Неприятно только, что winavr кидает свои binutils в пути, потом приходится вычищать.

 

Так. Пробую. Проект с параметрами из-под плагина студии

avr-gcc.exe  -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -fu
nsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -mcall-prologues
-finline-limit=2 -MD -MP -MT

 

WinAVR-2009

AVR Memory Usage
----------------
Device: atmega16

Program:    6300 bytes (38.5% Full)
(.text + .data + .bootloader)

Data:         75 bytes (7.3% Full)
(.data + .bss + .noinit)

EEPROM:       57 bytes (11.1% Full)
(.eeprom

 

WinAVR-2010

AVR Memory Usage
----------------
Device: atmega16

Program:    6238 bytes (38.1% Full)
(.text + .data + .bootloader)

Data:         75 bytes (7.3% Full)
(.data + .bss + .noinit)

EEPROM:       57 bytes (11.1% Full)
(.eeprom)

 

Вывод пока один - avr-libc немного подрихтовали-таки. Насчет работоспособности проекта - тоже пока не проверял.

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


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

а как вы поступаете: ставите сразу несколько копий WinAVR? как можно с удобством тестировать разные сборки компилятора на одинаковых проектах? как быть с прописыванием путей?
Однин из моих подходов озвучен выше.

Правда, эта "поделка" подходит не всем, так как мои makefile есть не у всех, не входят в стандатную поставку WinAVR, а стандартный и доступный каждому Mfile такого не генерирует.

 

Второй способ действует не попроектно, а валом на все, зато PATH не модифицируется на лету и всякие AVRstudio работают. И удобно для каких-то проверок прямо в командной строке набрать avr-gcc -Os -S foo.c.

Используется возможность файловой системы NTFS создавать линки на каталоги (на файлы тоже может, но это другая история, позволяющая на несколкьо мегабайт сократить размер каталога WinAVR-XXXX путём замены копий файлов из WinAVR-XXXXXX\bin на линки к телам файлов из WinAVR-XXXXXX\avr\bin Впрочем, сейчас это не актуально)

 

Ставим как и раньше толпу WinAVR-XXXX в соответствующие каталоги, но в PATH происываем C:\WinAVR\bin - как для установки одной версии в этот каталог. Но самого каталога нет.

Теперь лезем сюда http://technet.microsoft.com/en-us/sysinte...s/bb896768.aspx и берём программу junction либо ставим FAR.

Для работы с конкретной версией, например, WinAVR-20060421, говорим

junction C:\WinAVR C:\WinAVR-20060421
кстати, WinAVR-20060421 может стоять вообще в f:\avr\gcc\WinAVR-20060421, тогда говорим

junction C:\WinAVR f:\avr\gcc\WinAVR-20060421

Либо в FAR становимся на каталог f:\avr\gcc\WinAVR-20060421, наимаем Alt-F6 и в строке ввода набираем C:\WinAVR (либо нажимем Ctrl-Down и выбираем из списка).

Дополнительного места на диске C: это практически не займёт.

Кажется, что-то такое есть и в TotalCommnder через плугин.

FAR напротив такого каталога показывает не <Folder> а <Link>, по F8 стирает только линк.

Windows explorer в W2000/XP никак не выделяет, более того, при попытке вытереть линк он трёт его и все файлы каталога, на который указывал линк! Левая рука вин не знает, что сделала правая.

 

Теперь все программы, которые будут лезть в С:\WinAVR\ - будут попадать в указываемый линком каталог. Если в makefile ничего не указано, рассчитано на размещение компилятора по PATH, то при смене цели линка все проектіначнут копилироваться другой версией.

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


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

Неприятно только, что winavr кидает свои binutils в пути, потом приходится вычищать.
А я распаковываю инсталятор при помощи 7Zip и вытягиваю только нужные папки. И быстрее, и реестр не засоряется, и легко сносится удалением папки. Такой вот portable вариант.

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


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

А я распаковываю инсталятор при помощи 7Zip и вытягиваю только нужные папки. И быстрее, и реестр не засоряется, и легко сносится удалением папки. Такой вот portable вариант.

Поступаю аналогично. Только использую батник, который создаёт консоль, с прописанными нужными путями. Из этой консоли можно запускать хоть make хоть eclipse. Давно собирался выложить на суд общественности своё решение по объединению всех GNU/OpenSource утилит и программ для embedded.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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