|
AVR Studio vs IAR Embedded Workbench vs GCC, К чему привыкать то? |
|
|
|
Apr 13 2010, 15:46
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Дошли руки и до АВРок. Смотрю тут люди иногда предпочитают не использовать стандартную среду AVR Studio и ищут иных путей. Почему? Тот-же IAR - что за зверь? Ну GCC понятно, гнутый тулчайн, традиционно со своими гнутыми расширениями языка. На сколько он хорош? Тут же, как я понимаю, "умность" компилятора много значит потому, что тут всё очень Tiny  Пока скачал AVR Studio и жду своего Dragonа..... приедет ориентировочно послезавтра ))))
--------------------
The truth is out there...
|
|
|
|
|
 |
Ответов
(1 - 45)
|
Apr 13 2010, 18:26
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Если для Вас GCC знаком, то особого смысла использовать IAR нет. Есть задачи на которых IAR даёт выигрыш, а есть и наоборот. Кроме того, и сам компилятор имеет немного отличий связанных с мелочами. К примеру объявление прерываний, указания линковщику и т.п. Таким образом перепрыгнуть с одного на другой - существенной разницы нет. Думаю, что зная особенности, возможно сразу писать прогу, которая будет компилится и там и там. Зная особенности компилятора (его преимущества) можно существенно влиять на результат компиляции. Таким образом хорошее знание компилятора, поможет больше, чем его замена. Ну и AVR, на сегодняшний день, не такие уже и tiny.  Скажем под IAR, на данным момент, практически нет необходимости что-то прикручивать на ASM. Программа размером 1к вполне хорошо компилится. Озу, тоже практически всегда хватает. По производительности - лучше выбрать камень с необходимой. Короче - никаких проблем нет.
|
|
|
|
|
Apr 13 2010, 21:39
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Аа, т.е. такую роскошь, как отладка на уровне строк исходного кода с параллельным watch'ем пары-тройки переменных тут действительно только в AVR Studio можно поиметь, да? Ну я просто привык как-то, всё JTAG да JTAG. В общем я понял, зажрался  )) Но, в принципе то что тут, вроде как может оно и не надо особо...Иногда отладочным выводом в терминал можно даже быстрее локализовать проблему, чем брэйкпоинтами. Но всё равно не стал заморачиваться с изготовлением программаторов всех этих, сразу заказал Дракошу и всё ) А тем более как узнал, что ограничение на объем флеш памяти снято и он поддерживает всё и вся - сразу заказал не задумываясь.
--------------------
The truth is out there...
|
|
|
|
|
Apr 19 2010, 15:45
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата Как это не может??? Это совершенно независимый продукт. Вы можете только в ней работать. Скачал с сайта саму студию плюс два сервис пака. Поставил. По нажатии на кнопку compile мне сказали, что без WinAVR жизни нет. Пошел за WinAVR, с удивлением узнал, что это и есть тот самый AVR GCC собранный под венду. Скачал, поставил. Теперь при нажатии на кнопочку Compile происходит компиляция с использованием того самого GCC  Бесплатна то конечно бесплатна, но как-бы сейчас точно можно лучше. Ну что это такое, я даже не могу щёлкнуть правой кнопкой и открыть файл на котором стоит курсор(Open file at cursor). Ну это дико вообще! Какая бы там бесплатная она не была, а как минимум код писать нужно в другом редакторе - это факт. Ну по прошивке и кол-ву поддерживаемых программаторов/отладчиков спору нет.
--------------------
The truth is out there...
|
|
|
|
|
Apr 19 2010, 23:25
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата AVR Studio - это оболочка + ассемблер + симулятор. Компилятора Си там никогда не было. Они правда написали плагин для GCC. Ну я теперь разобрался да, что там ассемблер только. Это объясняет всё  Если она под си никогда толком и не затачивалась - тогда всё Ok. Со своии задачаи справляется )
--------------------
The truth is out there...
|
|
|
|
|
Apr 19 2010, 23:30
|

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

|
Цитата(mempfis_ @ Apr 19 2010, 17:29)  Плюсы AVRStudio проявляются когда приходится прошивать десятки-сотни плат. Используя AVRISPMKII через студию прошивается один контроллер, выбирается закладка AUTO и одним нажатием кнопки прошиваются остальные, только программатор успевай переставлять  Так тут студия не причем) Можно использовать консольную утилиту, только Enter успевай нажимать) Цитата(sigmaN @ Apr 20 2010, 01:00)  Скачал с сайта саму студию плюс два сервис пака. Поставил. По нажатии на кнопку compile мне сказали, что без WinAVR жизни нет. Когда проект создаете, выбирайте asm. Чистая студия только ассемблер в себе оной содержит. Цитата(sigmaN @ Apr 20 2010, 01:00)  Ну это дико вообще! Какая бы там бесплатная она не была, а как минимум код писать нужно в другом редакторе - это факт. ну это и естественно  Над редакторами люди трудятся и достигают конкретных поставленных целей. Цель же студии - симуляция, отладка МК. Цитата(sigmaN @ Apr 20 2010, 01:00)  Ну по прошивке и кол-ву поддерживаемых программаторов/отладчиков спору нет. А Вы попробуйте запустить avrdude. Там список программаторов не менее внушительный.
--------------------
Выбор.
|
|
|
|
|
May 19 2010, 08:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(sigmaN @ May 19 2010, 04:44)  В AVR035: Efficient C Coding for AVR написано, что архитектура AVR якобы затачивалась под уже существующий тогда компилятор IAR. Врут. И даже что под использование языков высокого уровня вообще - тоже слабо соответствует действительности. Один только уродский стек чего стоит.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
May 19 2010, 09:01
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(sigmaN @ May 19 2010, 01:44)  А на сколько сильно на практике gcc проигрывает IAR и проигрывает ли вообще? Ну не скажу про AVR, но для MSP430 получалось по размеру где-то 16к с IAR против 19-20 с MSPGCC. В общем-то, не набивая под завязку, вполне можно пережить. Тем более что всё равно флеши 60к, так что больше половины свободно. При этом, как уже упоминали, правильная манера кодирования позволяет ещё что-либо улучшить. Хотя, как говорят умные люди, не надо ничего тонко оптимизировать, пока это действительно не будет нужно. Или другими словами, "не лечи то, что работает" Ну а насчёт "к чему привыкать"... Вот на днях директору пришло письмо от заинтересованной конторы, что после 19-го к нам могут прийти внезапно специально обученные люди, которые проверят, действительно ли мы отказались от использования пикада, или продолжаем его нелегально использовать. Хорошо хоть предупредили... Узнайте, сколько стоит IAR и оцените, сможете ли вы его себе позволить.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 19 2010, 12:32
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
В принципе согласен, что при грамотном использовании gcc может оказаться очень хорошим конкурентом IAR. Однако на WINAVR( как и на всё что GNU) требуется перелопатить достаточно много документации, чтобы понять что к чему и как вообще лучше кодить и какие ключи оптимизации использовать. Предлагаю собрать тут некий how to или tips and tricks )) Я потом выложу тут то, что я накопал. Сейчас нет времени. Пока у меня вопрос: Код static volatile struct{ uint16_t timer_ticks; uint16_t timer_ms; }timer_counters;
uint16_t timer_get_ticks() { return timer_counters.timer_ticks; 8a: 20 91 61 00 lds r18, 0x0061 8e: 30 91 62 00 lds r19, 0x0062 } 92: c9 01 movw r24, r18 94: 08 95 ret Зачем так тупить? что, нельзя было сразу в r24:r25 загрузить значение? *код просто для примера. Дело ясное, что в таких случаях нужна структура без static и прямое обращение к ней из других модулей вместо вот таких вот функций-паразитов в микроконтроллеропрограммировании
--------------------
The truth is out there...
|
|
|
|
|
May 19 2010, 23:42
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
А ещё забавно, что похоже при любых -О приходится всё равно вручную добавлять -fwhole-program а это хорошая опция, она мне нравится! )) И в техасовском компиляторе(с котормы я дело имел прежде) она включалась чуть ли не по дефолту(когда уровень оптимизации достаточно высок). Но всё таки круто! Один компилятор, столько архитектур, столько языков! Всё таки очень круто, да и бесплатно ещё! added: ооо, нет. не то. этот -fwhole-program это совсем не то ))
--------------------
The truth is out there...
|
|
|
|
|
May 20 2010, 07:30
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(SSerge @ May 19 2010, 11:36)  Врут. И даже что под использование языков высокого уровня вообще - тоже слабо соответствует действительности. Один только уродский стек чего стоит. Это всё обсуждалось уже. Всё познаётся в сравнении. По сравнению с PIC16 или с х51, megaAVR лучше "адаптирован". Претензий не больше чем к тому же ARM. Наличие "особенностей" в ядре и системе комманд, обычное явление для любого процессора/ семейства. Всё это результат многочисленных компромисов. То что вы называете "уродский стэк", вполне можно назвать "крассивое решение по стэку". Причём, ни грамма не покривив душой. 2 sigmaN. Таких "нюансов" компиляции, будет полно и для IAR и для GCC. Чем больше вы будете отходить от ASM, тем меньше это вас будет волновать. В конечном итоге вас ведь интересует не "оптимальность написания программы в коде", а её принципиальная работоспособность, скорость написания, возможности по заимствованию, хорошая отлаживаемость, хорошая поддерживаемость, лёгкость развития проекта и его "прозрачность". Всё это присутствует в полной мере. Суммарный вклад "нюансов" не велик. Кроме того, как правило, невелика часть программы которая является критически важной по времени. Эту часть программы можно написать на ASM. В последнем IAR для ARM - вроде даже видел какой-то проффилировщик. Короче идёт развитие программных сред и средств, и надо это принять как должное, а не цепляться за старые мощи.
|
|
|
|
|
May 20 2010, 09:32
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(sigmaN @ May 20 2010, 12:38)  Странно, я так и не нашел такой опции, чтобы компилятор не компилил файлы по одному, а раскатывал всю простыню как-бы в один большоооой си файл, потом проходился уже по нему оптимизатором и на выходе выдавал то, что должен. Цитата(sigmaN @ May 20 2010, 03:42)  added: ооо, нет. не то. этот -fwhole-program это совсем не то )) Это как раз оно. Да, да, да.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 20 2010, 14:21
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата Это как раз оно. Да, да, да. Нет. Не оно. Это он считает, что каждый модуль это вся программа и ничего больше на свете нет. Для того, чтобы тут всё работало - нужно самому всё запихать в один большой файл и скомпилить. А так, связи с main он не определяет  . Но таки да, исправно выбрасывает то, что не используется в пределах модуля. Эксперимент: timer.c описывает функцию get_timer_ticks() которая возвращает тики таймера. Сама переменная тиков объявлена как static volatile и щёлкает по прерыванию. Из main.c в main() делаем вызов t = get_timer_ticks(); компилим с -fwhole-program. О ужас, проект не линкуется! main.o хочет символ, которого нет! get_timer_ticks благополучно выбросили, потому что модулю timer.c эта функция не нужна(там то она не используется нигде); Так что - не то  А в техасовском компиляторе просто сказка! Там ещё есть несколько вариантов на выбор(ну типа чтоб без фанатизма или всё подряд удалял). Даа, хороший компилятор. Только уж оооочень долго он работает если все оптимизации включить. А ещё памяти отхавывает с пол гига(на приличном исходнике разумеется). Но оптимизирует зато чётко.
--------------------
The truth is out there...
|
|
|
|
|
May 21 2010, 06:45
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(SasaVitebsk @ May 21 2010, 09:43)  Честно говоря не совсем понимаю зачем это вам? Оптимизация лучше. Например, функции, описанные за пределами модуля, не могут инлайниться. А иногда очень хочется, особенно в прерываниях. А описание в одном модуле не всегда соответствует логике и структуре проекта.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 21 2010, 07:15
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(MrYuran @ May 21 2010, 12:45)  Оптимизация лучше. Ха! И это говорит человек, у которого осталось свободным пол-флеша? Я согласен с SasaVitebsk. Топикстартеру надо сначала изучить предмет (компилятор), все ключи, нюансы. А уже потом, если в этом останется необходимость, задумываться о супер-оптимизации. sigmaN, для выбрасывания неиспользуемого кода/данных в gcc есть ключи компилятора -ffunction-sections -fdata-sections и линкера --gc-sections. Мне показалось, что вы это просмотрели.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 21 2010, 07:27
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(AHTOXA @ May 21 2010, 11:15)  Ха! И это говорит человек, у которого осталось свободным пол-флеша?  Оптимизация, как известно, палочка о двух концах - размер/быстродействие. Хотя, я с некоторых пор тоже не особо заморачиваюсь. Например, в реализации FreeModbus в прерывании УАРТа вызывается функция обработки через указатель и ничего... на скорости 115200 валит 100 регистров в секунду за милую душу Но всё равно, когда замечаешь разницу относительно ИАРа, это немного нервирует Видимо, у ИАРа просто оптимизация более адаптивная и многопроходная, а GCC-шному компилятору надо по месту объяснять, что от него требуется.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 21 2010, 08:57
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(SasaVitebsk @ May 21 2010, 09:43)  Честно говоря не совсем понимаю зачем это вам? Когда нужно впихнуть невпихуемое - то это отличный вариант. Пример из жизни: c 16Кб хорошо оптимизированной программы удалось выиграть ещё около 500Байт - и это было решающим фактором. Цитата Насколько я понимаю, вы можете из нескольких C файлов один и по include сделать. Только зачем всё в одну кучу валить? Инклюдить всё - это как-то через одно место ИМХО. Зачем делать через Ж, когда компилятор предоставляет стандартное решение? Цитата Наоборот раздельная компиляция - то что надо. Некоторые даже ошибки выявляются. Сообщения об ошибках выдаются точно также как и при раздельной компиляции. Так что никакой разницы здесь нет. И мне даже кажется что так компиляция происходит быстрее. Цитата(MrYuran @ May 21 2010, 11:46)  Дык, уже  Отлично! Цитата только что попробовал -fwhole-program на mspgcc, обругался насчёт анрекогнайзед опшн Можете сами попробовать пересобрать msp-gcc с этой функцией или попросить Клёна об этом - он ведь у нас Великий Турук-Макто:-)
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 21 2010, 09:04
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(demiurg_spb @ May 21 2010, 12:57)  Можете сами попробовать пересобрать msp-gcc с этой функцией или попросить Клёна об этом - он ведь у нас Великий Турук-Макто:-) msp в его меню не входит... я, правда, тоже уже на Cortex M0 заглядываюсь потихоньку Надо бы ещё глянуть, что в мспжцц4 насочиняли.. Однако, тема про АВР - вот там всё должно быть в ногу со временем.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|