Jump to content

    
Sign in to follow this  
_Pasha

WinAVR-20100110

Recommended Posts

Собсно сабж.

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

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

 

AVR-gcc 4.3.3

AVR32-gcc 4.3.2

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

Share this post


Link to post
Share on other sites
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).

Share this post


Link to post
Share on other sites

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

 

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

Share this post


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

 

Я рабочие проекты попересобирал (только Си, ++ нету), и в итоге везде уменьшение размера кода: стабильно от 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), как следствие, возможно, изменений с функциями...

Edited by SysRq

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
а как вы поступаете: ставите сразу несколько копий 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 с ней же. Исправил. Написаному выше теперь - верить.

Share this post


Link to post
Share on other sites
а как вы поступаете: ставите сразу несколько копий 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 немного подрихтовали-таки. Насчет работоспособности проекта - тоже пока не проверял.

Share this post


Link to post
Share on other sites
а как вы поступаете: ставите сразу несколько копий 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, то при смене цели линка все проектіначнут копилироваться другой версией.

Share this post


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

Share this post


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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this