|
WinAVR - как оно?, Эффективность компилятора |
|
|
|
Jul 29 2005, 10:47
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Задумал я тут тулзы унифицировать окончательно. И понял, что альтернативы GNU / GCC нет - ибо, например, покупку IAR, считаю бессмысленной. Я просто понял, что оптимизация кода головой программера (и инвестирование денег в этого программера, и стимулирование оного (сделал хорошо - получи премию), разумеется, вздрачивание - куда же без него) дает больший эффект, чем выигрыш самого лучшего компилятора. Что касается среды - http://www.eclipse.org/ ок. С Армами все понятно. Там GCC рулит. Сами проверяли, инфы есть много на эту тему. Но вот для AVR (иногда надо делать "контроллеры светодиодов" за 1.5$) никогда не пробовал subj. Каково мнение народа? http://winavr.sourceforge.net/
|
|
|
|
|
Jul 29 2005, 19:54
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Evgeny_CD @ Jul 29 2005, 13:47) Задумал я тут тулзы унифицировать окончательно. И понял, что альтернативы GNU / GCC нет - ибо, например, покупку IAR, считаю бессмысленной. Я просто понял, что оптимизация кода головой программера (и инвестирование денег в этого программера, и стимулирование оного (сделал хорошо - получи премию), разумеется, вздрачивание - куда же без него) дает больший эффект, чем выигрыш самого лучшего компилятора. Ага. Ковырялся недано в одних примерах к платке, поставляемых изготовителем. Скомпилировал, работает, пора рабочую программу писать, но... Не могу на те исходники смотреть, сердце кровью обливается. Слегка прошёлся - и выглядеть стали "читабельнее", и объём загрузочного файла сократился с 6 до 5.5К. Это при том, что там ещё куча строк для выдачи на отладочный терминал. Цитата(Evgeny_CD @ Jul 29 2005, 13:47) Но вот для AVR (иногда надо делать "контроллеры светодиодов" за 1.5$) никогда не пробовал subj. Каково мнение народа? http://winavr.sourceforge.net/Несколько лет только им и пользуюсь. Проигрывает ИАР-у по объёму кода где-то на 5--20% в зависимости от задачи, стиля, ... (хотя последняя пара, которую сравнивал - что-то типа gcc 3.0.2 и иар 2.27).
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Aug 16 2005, 07:51
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
avr-gcc штука классная, причём не надо тырить у IAR ничего, и никаких лекарств от запоров - тоже не надо. Что мне не понравилось - в коде обработчика прерывания GCC разрешает эти самые прерывания. Ну, ладно бы отключаемая функция была... А то код получается не совсем совместимый с проектами под, например, IAR. Пример: обработчик прерывания по достижению некоего числа таймером №1. Один чел написал код на IAR для реализации ШИМ, и сперва разрешил прерывания, а потом взялся настраивать таймер. Когда в обработчике прерывания не разрешены (IAR), то ничего страшного не происходит, а вот под GCC.. Контроллер уходил в обработчик немедленно после старта, потом входил повторно и так до упора, пока не переполнится стек, а потом вис нахрен. Ессно, расхваливаемый многими симулятор на AVRStudio работает криво (как мне показалось) и пришлось голову поломать, чтобы оживить ранее работоспособный проектик..
|
|
|
|
|
May 17 2006, 05:02
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(misyachniy @ Jan 13 2006, 18:12)  impatt В GCC есть SIGNAL () и INTERRUPT(). Разница между ними в наличии команды sei() в INTERRUPT(). Спасибо, не знал. Теперь узнал и вздохнул с облегчением (я не шучу). Пользуюсь. Уверен, что всё это описано в доке, но там всё на чисто англицком языке. Ессно, когда читаешь одно слово через три, пропустить немудрено. Ещё раз благодарю.
|
|
|
|
|
May 17 2006, 06:31
|
Местный
  
Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225

|
Цитата([banned] @ May 17 2006, 10:17)  Цитата(pulsar-17 @ Jul 29 2005, 17:56)  Мнение хорошее.
но иногда надо ему "помогать"
если вы не хотите помогать компилятору, а наоборот ожидаете от него помощи то возьмите на [banned] - великолепный компилятор - программатор CodeVisionAVR (2Мб всего !) и дополните его бесплатным симулятором VMLAB (4Мб) и просто насладитесь работой! вот примеры http://electronix.ru/redirect.php?http://[banned]/avrpic06.htm Уважаемый, все Ваши полсотни постов как близнецы-братья содержимое которых сводится к одному - раскрутке собственного сайта но никак по сути поставленного вопроса , имхо
|
|
|
|
|
May 17 2006, 14:55
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Пользуюсь с 2003 года.Жалоб нет. Надо немножко приноровиться (например как с SIGNAL/INTERRUPT), требует определенной дисциплины мышления, (как с приведением типов, но это на мой взгляд это к лучшему), зато потом все идет как по маслу. По оптимизации - местами проигрывает IAR, местами выигрывает.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
May 18 2006, 01:22
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата([banned] @ May 17 2006, 15:17)  Цитата(pulsar-17 @ Jul 29 2005, 17:56)  Мнение хорошее.
но иногда надо ему "помогать"
если вы не хотите помогать компилятору, а наоборот ожидаете от него помощи то возьмите на [banned] - великолепный компилятор - программатор CodeVisionAVR (2Мб всего !) и дополните его бесплатным симулятором VMLAB (4Мб) и просто насладитесь работой! вот примеры http://electronix.ru/redirect.php?http://[banned]/avrpic06.htm  Я использовал CodeVision. Да, неплохой компилятор. Как и все остальные. Но ничего особо замечательного я в нем не ощутил. Помощи он мне тоже ни какой не дал, что же можно от него ожидать, это ведь просто программа. Многим нравиться этот инструмент тем, что он поставляется с библиотеками для работы с ds18b20, hd44780 и другими приборами. Но мне, например, кажется что ничего особенного в этом нет. Еще не известно как написаны эти библиотеки. Да и лучше такие вещи, даже на начальных порах писать самому, потому что это повышает Level-up. Симуляторы, такие, как VMLab & Proteus можно конечно использовать, но не стоит им полностью доверять. Все таки симулятор он и есть симулятор.
--------------------
Выбор.
|
|
|
|
|
May 18 2006, 09:40
|

Профессионал
    
Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072

|
Цитата(Evgeny_CD @ Jul 29 2005, 13:47)  И понял, что альтернативы GNU / GCC нет - ибо, например, покупку IAR, считаю бессмысленной.Но вот для AVR (иногда надо делать "контроллеры светодиодов" за 1.5$) никогда не пробовал subj. Каково мнение народа? Тут все просто - если памяти программ в избытке, и можно поступиться быстродействием, то GCC это хороший выбор. ИАР выигрывает у GCC по всяким мелким оптимизациям (исключение лиших загрузок регистров, использование X и Z регистров для доступа к памяти даже без явного описания указателей в программе) и наличием cross-call оптимизации. В в свое время написал довольно объемный набор макросов который нивелирует различия в синтаксисе обоих компиляторов и с тех пор использую оба в зависимости от требований и наличия внешних библиотек (которые править не желательно). BTW, я также отказался от использования make и перешел на jam. С использванием средств jam'a можно писать такие вещи: Код rule target_gcc161 { tool_gcc;
MCU_FULL = atmega161; MCU_PROGR = Mega161; MCU_SHORT = m161;
CCOPT_TYPE = speed; CCOPT_LEVEL = 2; .... }
rule target_iar161 { tool_iar;
MCU_FULL = AT90Mega161; MCU_PROGR = Mega161; MCU_SHORT = m161;
CCOPT_TYPE = speed; CCOPT_LEVEL = 9;
CCFLAGS += --do_cross_call --cross_call_passes=5; } А затем просто указывать "jam iar161" или "jam gcc161".
|
|
|
|
|
May 26 2006, 22:52
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069

|
Цитата misyachniy Jan 13 2006, 18:12 impatt В GCC есть SIGNAL () и INTERRUPT(). Разница между ними в наличии команды sei() в INTERRUPT(). ____________________________________________________________ Цитата impatt ...Уверен, что всё это описано в доке,... ____________________________________________________________ ____________________________________________________________ Функции обработки прерываний SIGNAL() & INTERRUPT() были до версии WinAVR-20050214-install.exe прописаны в ...\WinAVR\avr\include\avr\signal.h и описаны в ...\WinAVR\doc\avr-libcavr-libc-user-manual-1.2.3.pdf _________ Но с версии WinAVR-20060125-install.exe в ...\WinAVR\doc\avr-libc\avr-libc-user-manual-1.4.3.pdf функция INTERRUPT() объявлена deprecated (осуждаемой) и в файлах не прописана. Дескать, (стр.45...-1.4.3.pdf) "As this macro has been used by too many unsuspecting people in the past, it has been deprecated, and will be removed in a future version of the library. Users who want to legitimately re-enable interrupts in their interrupt handlers as quickly as possible are encouraged to explicitly declare their handlers as described above." "above" - это ссылка на стр.128., где разъясняется как сделать вложенные прерывания. _________________ Александр 2006 05 27
|
|
|
|
|
May 27 2006, 13:59
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(halfdoom @ May 18 2006, 12:40)  Цитата(Evgeny_CD @ Jul 29 2005, 13:47)  И понял, что альтернативы GNU / GCC нет - ибо, например, покупку IAR, считаю бессмысленной.Но вот для AVR (иногда надо делать "контроллеры светодиодов" за 1.5$) никогда не пробовал subj. Каково мнение народа?
Тут все просто - если памяти программ в избытке, и можно поступиться быстродействием, то GCC это хороший выбор. ИАР выигрывает у GCC по всяким мелким оптимизациям (исключение лиших загрузок регистров, использование X и Z регистров для доступа к памяти даже без явного описания указателей в программе) и наличием cross-call оптимизации. В в свое время написал довольно объемный набор макросов который нивелирует различия в синтаксисе обоих компиляторов и с тех пор использую оба в зависимости от требований и наличия внешних библиотек (которые править не желательно). BTW, я также отказался от использования make и перешел на jam. С использванием средств jam'a можно писать такие вещи: Код rule target_gcc161 { tool_gcc;
MCU_FULL = atmega161; MCU_PROGR = Mega161; MCU_SHORT = m161;
CCOPT_TYPE = speed; CCOPT_LEVEL = 2; .... }
rule target_iar161 { tool_iar;
MCU_FULL = AT90Mega161; MCU_PROGR = Mega161; MCU_SHORT = m161;
CCOPT_TYPE = speed; CCOPT_LEVEL = 9;
CCFLAGS += --do_cross_call --cross_call_passes=5; } А затем просто указывать "jam iar161" или "jam gcc161". Вот бы поделился! Я думаю масса людей было бы Вам благодарна. Я пока не нахожу в себе сил такую работу проделать. Ну и описаний не достаточно. Как-то они разбросаны и беспорядочны.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|