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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> WinAVR - как оно?, Эффективность компилятора
Evgeny_CD
сообщение Jul 29 2005, 10:47
Сообщение #1


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Задумал я тут тулзы унифицировать окончательно. И понял, что альтернативы GNU / GCC нет - ибо, например, покупку IAR, считаю бессмысленной. Я просто понял, что оптимизация кода головой программера (и инвестирование денег в этого программера, и стимулирование оного (сделал хорошо - получи премию), разумеется, вздрачивание - куда же без него) дает больший эффект, чем выигрыш самого лучшего компилятора.

Что касается среды - http://www.eclipse.org/ ок.

С Армами все понятно. Там GCC рулит. Сами проверяли, инфы есть много на эту тему.

Но вот для AVR (иногда надо делать "контроллеры светодиодов" за 1.5$) никогда не пробовал subj. Каково мнение народа?

http://winavr.sourceforge.net/
Go to the top of the page
 
+Quote Post
pulsar-17
сообщение Jul 29 2005, 13:56
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 7-12-04
Из: Московская область
Пользователь №: 1 376



Мнение хорошее.
Компилятор делает хороший код, но иногда надо ему "помогать", писать исходник разбиваая сложные расчеты на несколько простых, явно перобразовывать типы (особенно char), учитывать, что AVR восьмиразрядный и лишние операции ненужны(по умолчанию int 16 бит). Причуды тоже есть, например иногда два ret в конце функции ставит... Но это компенсируется большим количеством всевозможных чисто GNUшных фич, морем всевозможных утилит, библиотек и хорошей документацией на все это.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 29 2005, 19:54
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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).


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
impatt
сообщение Aug 16 2005, 07:51
Сообщение #4


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

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



avr-gcc штука классная, причём не надо тырить у IAR ничего, и никаких лекарств от запоров - тоже не надо. Что мне не понравилось - в коде обработчика прерывания GCC разрешает эти самые прерывания. Ну, ладно бы отключаемая функция была... А то код получается не совсем совместимый с проектами под, например, IAR. Пример: обработчик прерывания по достижению некоего числа таймером №1. Один чел написал код на IAR для реализации ШИМ, и сперва разрешил прерывания, а потом взялся настраивать таймер. Когда в обработчике прерывания не разрешены (IAR), то ничего страшного не происходит, а вот под GCC.. Контроллер уходил в обработчик немедленно после старта, потом входил повторно и так до упора, пока не переполнится стек, а потом вис нахрен. Ессно, расхваливаемый многими симулятор на AVRStudio работает криво (как мне показалось) и пришлось голову поломать, чтобы оживить ранее работоспособный проектик..
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Jan 11 2006, 09:38
Сообщение #5


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Вот пробую под eclipse AVR-GCC4.0.2 сборки klen.org. Об эффективности пока сказать не могу, но уже приятно, что как-то работаетwink.gif


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
misyachniy
сообщение Jan 13 2006, 15:12
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



impatt
В GCC есть SIGNAL () и INTERRUPT().
Разница между ними в наличии команды sei() в INTERRUPT().
Go to the top of the page
 
+Quote Post
impatt
сообщение May 17 2006, 05:02
Сообщение #7


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

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Цитата(misyachniy @ Jan 13 2006, 18:12) *
impatt
В GCC есть SIGNAL () и INTERRUPT().
Разница между ними в наличии команды sei() в INTERRUPT().


Спасибо, не знал. Теперь узнал и вздохнул с облегчением (я не шучу). Пользуюсь.
Уверен, что всё это описано в доке, но там всё на чисто англицком языке. Ессно, когда читаешь одно слово через три, пропустить немудрено.
Ещё раз благодарю.
Go to the top of the page
 
+Quote Post
m16
сообщение May 17 2006, 06:31
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 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

Уважаемый, все Ваши полсотни постов как близнецы-братья содержимое которых сводится к одному - раскрутке собственного сайта но никак по сути поставленного вопроса , имхо
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение May 17 2006, 14:55
Сообщение #9


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

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



Пользуюсь с 2003 года.Жалоб нет.
Надо немножко приноровиться (например как с SIGNAL/INTERRUPT),
требует определенной дисциплины мышления, (как с приведением типов, но это на мой взгляд это к лучшему), зато потом все идет как по маслу.
По оптимизации - местами проигрывает IAR, местами выигрывает.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение May 18 2006, 01:22
Сообщение #10


Познающий...
******

Группа: Свой
Сообщений: 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


bb-offtopic.gif Я использовал CodeVision. Да, неплохой компилятор. Как и все остальные. Но ничего особо замечательного я в нем не ощутил. Помощи он мне тоже ни какой не дал, что же можно от него ожидать, это ведь просто программа. Многим нравиться этот инструмент тем, что он поставляется с библиотеками для работы с ds18b20, hd44780 и другими приборами. Но мне, например, кажется что ничего особенного в этом нет. Еще не известно как написаны эти библиотеки. Да и лучше такие вещи, даже на начальных порах писать самому, потому что это повышает Level-up.
Симуляторы, такие, как VMLab & Proteus можно конечно использовать, но не стоит им полностью доверять. Все таки симулятор он и есть симулятор.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
halfdoom
сообщение May 18 2006, 09:40
Сообщение #11


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

Группа: Свой
Сообщений: 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".
Go to the top of the page
 
+Quote Post
Laksus
сообщение May 26 2006, 22:52
Сообщение #12


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

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
msn
сообщение May 26 2006, 23:10
Сообщение #13


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

Группа: Свой
Сообщений: 126
Регистрация: 1-01-06
Из: Украина, Киев
Пользователь №: 12 759



Пользуюсь больше 4-х лет. Особых замечаний не было. После того как добавили поддержку в студии работать стало еще приятнее, про IAR который изредка использовался для откладки кусков кода уже забыл. Есть правда пара мелких недочетов: от версии к версии иногда меняются различные часто используемые макросы, переезжают в другое место файлы заголовков, до сих пор нет нормально реализованной printf, иногда не хватает поддержки С++ и не очень удобно размещать массивы строк в Flash. Оптимизации маленьких кодов очень уступает IAR, проврете на замене местами байт в слове.
Go to the top of the page
 
+Quote Post
msn
сообщение May 26 2006, 23:10
Сообщение #14


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

Группа: Свой
Сообщений: 126
Регистрация: 1-01-06
Из: Украина, Киев
Пользователь №: 12 759



Пользуюсь больше 4-х лет. Особых замечаний не было. После того как добавили поддержку в студии работать стало еще приятнее, про IAR который изредка использовался для откладки кусков кода уже забыл. Есть правда пара мелких недочетов: от версии к версии иногда меняются различные часто используемые макросы, переезжают в другое место файлы заголовков, до сих пор нет нормально реализованной printf, иногда не хватает поддержки С++ и не очень удобно размещать массивы строк в Flash. Оптимизации маленьких кодов очень уступает IAR, проврете на замене местами байт в слове.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 27 2006, 13:59
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 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".


Вот бы поделился! smile.gif
Я думаю масса людей было бы Вам благодарна.
Я пока не нахожу в себе сил такую работу проделать. smile.gif
Ну и описаний не достаточно. Как-то они разбросаны и беспорядочны.
Go to the top of the page
 
+Quote Post

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

 


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


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