Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Что лучше взять для AVR?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
High Voltage
Что лучше и где взять, чтобы совмещать Асс и С/С++ под AVR? Никак не пойму, можно ли в AVR Studio писать на С/С++?
G}{OST
Цитата(High Voltage @ Nov 22 2005, 13:28) *
Что лучше и где взять, чтобы совмещать Асс и С/С++ под AVR? Никак не пойму, можно ли в AVR Studio писать на С/С++?

1. IAR
2. Нет
starter48
Цитата(High Voltage @ Nov 22 2005, 16:28) *
Что лучше и где взять, чтобы совмещать Асс и С/С++ под AVR?

Однозначно IAR C++
лежит на ftp.iar.com
в каталоге pub/mirror/EWMIRROR/002352/
Но он платный.
ломалку здесь поищи: http://forum.electronix.ru/index.php?showtopic=3371

Ещё есть бесплатный WinAvr. Но код он генерит немного хуже, чем IAR.
Цитата(High Voltage @ Nov 22 2005, 16:28) *
Никак не пойму, можно ли в AVR Studio писать на С/С++?

Писать можно. Компилировать нельзя wink.gif
High Voltage
А так чтобы для русского человека. Скачал, кр*кнул, и полная версия. ЧТобы и писать и компилить и отлаживать, ну и ессно программировать сами контроллеры можно было (AVR ISP)? ИАР то можно надыбать на халяву?

А для AVR Studio можно чем нить компилить? Компилятор там?
starter48
Цитата(High Voltage @ Nov 22 2005, 16:48) *
А так чтобы для русского человека. Скачал, кр*кнул, и полная версия. ЧТобы и писать и компилить и отлаживать, ну и ессно программировать сами контроллеры можно было (AVR ISP)? ИАР то можно надыбать на халяву?

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

Для внутрисхемной отладки тебе понадобится JTAG ICE
схемы первой версии можешь поискать тут:
http://forum.electronix.ru/index.php?showtopic=8055
я там и на свой вариант ссылку давал.
Но первая версия подходит не для всех контроллеров. Хорошо иметь вторую. Но её схемы и прошивки я в инете не видел. Т.е. JTAG ICE II придётся покупать.

В качестве стартового программатора можешь применить AvReal:
http://www.ln.com.ua/~real/avreal

Цитата(High Voltage @ Nov 22 2005, 16:48) *
А для AVR Studio можно чем нить компилить? Компилятор там?

Там asm только.
А вообще, рекомендую полистать форум. Здесь много тем про программаторы, компиляторы и отладку. Чтобы не плодить дубли тем.
High Voltage
Спасибо! Будем париться.

P.S.: Про ломалку я как-то и не увидел строчку, извиняюсь!
BVU
Все зависит от того сколько много Вы делали проектов на С/C++ и какие ранее программные продукты использовали.
Существует IAR, ICC, CodeVision, avr-gcc и наконец VisualASM (что конечно к C отношения не имеет, но так к слову).
Все рекомендуют IAR, я тоже его советую, т.к. этот инструмент наиболее универсален для создания проектов для AVR. При достаточно серьезном освоении этого программного продукта работать на нем становиться легко и удобно, как если бы Вы использовали VC для создания программ на PC.
ikX
Цитата(High Voltage @ Nov 22 2005, 14:28) *
Никак не пойму, можно ли в AVR Studio писать на С/С++?


В последней версии AVRstudio включен плагин для совместной работы с GCC или WINAVR (один из них должен быть установлен), что позволяет писать программы на Си непосредственно в студии
AndyBig
Эх... Есть одно неудобство у IAR после VC smile.gif. Он не предлагает автоматом список членов класса и структур после операторов "." и "->" smile.gif.
High Voltage
Писать я писал много на Ms VS 5.0, 6.0, 7.0 (.NET). И консоли, и графику, и окна, как то на MFC так и WinAPI, так что с С/С++ у меня всё хорошо. Окна и на чистом С писал.

Удобнее всего наверное в самой AVR Studio писать и компилить. А что за плагин?

А, скачал IAR, пока не разобрался, времени не было (в универе был).
Писал, правда совсем малость, на С под ARM в IAR.

И можно ли проект делать совместно Асс и С? В IAR ARM я знаю можно.
JeDay
Попробуй ICC AVR. Мож понравится...
http://www.imagecraft.com/software/demos.html
Лечилки вроди нету пока, есть отматывалка времени.
sav6622
Прекрасно можно писать в С в самой среде AVRStudio, в последней версии действительно плагин поставили, перед установкой AVRStudio нужно поставить пакет WinAVR. Студия его автоматичеки подхватит при установке.
Кстати стало достаточно удобно... отлаживаешься тут же в симуляторе... прямо по сишному коду... сам написал и отладил небольшой проект на tiny2313
lazycamel
Цитата(High Voltage @ Nov 22 2005, 14:28) *
Что лучше и где взять, чтобы совмещать Асс и С/С++ под AVR? Никак не пойму, можно ли в AVR Studio писать на С/С++?


1)
Варианта 3, по крайней мере я использую.

СodeVision AVR - когда по быстрому надо сбацать халтурку и забыть про нее
AVR Studio + WinAVR - когда надо что-то по-серьезнее
IAR - когда думаю что понадобится кросплатформенная переносимость

2)
AVR Studio начиная c 4b25 поддерживает GCC/WinAVR напрямую.

ЗЫ: С++ не использую, только С - т.е. точно по 2-му вопросу сказать не могу.
dxp
Цитата(AndyBig @ Nov 22 2005, 22:28) *
Эх... Есть одно неудобство у IAR после VC smile.gif. Он не предлагает автоматом список членов класса и структур после операторов "." и "->" smile.gif.

Так и не используйте его оболочку. У ИАРа главное - компилятор. А редактор лучше внешний взять. Который все это (и многое другое) умеет.
MicronSys
Я использую
WinAvr + VMLAB получается хорошая связка

до этого работал на IAR C++ симулятор AVRstudio

WinAvr немного больше код делает на компилит давольно таки хорошо
VMLAB очень хороший симулятор правда не без хрехов
Vict59
Использую IAR C 2.28 (написания кода) + AVRstudio (для отладки, проверки временных интервалов). ИМХО очень хорошая "парочка".
Георгий
А есть ли какая-то литература (желательно русская) по IAR? По чему лучше его освоить?
dimka2001
Лучше всего codevision!!!
haker_fox
Цитата
А есть ли какая-то литература (желательно русская) по IAR? По чему лучше его освоить?


К сожалению не находил, когда пытался освоить IAR. Но к тому времени я уже немного знал английский (очень не много) и потихоньку разбирал мануал пользователя. Там все доходчиво сказано. Если у Вас возникнут вопросы, я думаю на них смогут ответить на этом форуме, потому, что там (в IAR) все на самом деле очень просто.

На счет освоить... Я сначала открыл и скомпилировал пример, который прилагается к дистрибутиву IAR, затем с нуля начал свой проект, по пути знакомясь с особенностями IAR EWAVR.
Георгий
Спасибо. Видимо, пока у меня будет наоборот, быстрые проекты - на ассемблере, когда время не поджимает - на Си.
Вопрос возник. Когда пробовал WinAvr, он выдавал полный листинг с сишными кодами и ассемблерной реализацией всего проекта в целом. А IAR уменя выдает листинги только по модулям, а цельную картину не могу получить. Это он в принципе не может или я что-то не доделываю?
IgorKossak
Цитата(Георгий @ Nov 25 2005, 07:10) *
...Вопрос возник. Когда пробовал WinAvr, он выдавал полный листинг с сишными кодами и ассемблерной реализацией всего проекта в целом. А IAR уменя выдает листинги только по модулям, а цельную картину не могу получить. Это он в принципе не может или я что-то не доделываю?

Цельная картина складывается после сборки проекта, но в IAR-овском линкере не предусмотрена такая возможность (а может я ей просто не пользуюсь wink.gif ).
Если бы Вы сказали зачем оно нужно, то может можно было бы поискать обходные манёвры, например:
- загрузить проект в отладчик IAR и вызвать окно дизассемблера;
- загрузить проект в AVRStudio и далее так же.
Георгий
В WinAVR-е было удобно контролировать, что компилится и как реализуются какие-то куски программы (после чего я его и покинул). Просто у меня начались временные расхождения в программах, отлаживаемых в разных системах, вот и хотелось бы иметь этот ассемблереый код. Но похоже такого вообще нет. Перерыл все что идет с IAR, все установки поперепробовал, но увы мне sad.gif
Георгий
Столкнулся с непоняткой компиляции IAR-а.
Исходник:
Код
void delay20mks(void)
{
char j,k;

  for (j=0; j< 6; j++)
    for (k=0; k<176; k++);
}

В Debug режиме:
Код
    21          void delay20mks(void)
   \                     delay20mks:
     22          {
     23           char j,k;
     24          
     25            for (j=0; j< 6; j++)
   \   00000000   E010               LDI     R17, 0
   \   00000002   C004               RJMP    ??delay20mks_0
     26              for (k=0; k<176; k++);
   \                     ??delay20mks_1:
   \   00000004   9503               INC     R16
   \                     ??delay20mks_2:
   \   00000006   3B00               CPI     R16, 176
   \   00000008   F3E8               BRCS    ??delay20mks_1
   \   0000000A   9513               INC     R17
   \                     ??delay20mks_0:
   \   0000000C   3016               CPI     R17, 6
   \   0000000E   F410               BRCC    ??delay20mks_3
   \   00000010   E000               LDI     R16, 0
   \   00000012   CFF9               RJMP    ??delay20mks_2
     27          }
   \                     ??delay20mks_3:
   \   00000014   9508               RET

В Release режиме:
Код
     21          void delay20mks(void)
   \                     delay20mks:
     22          {
     23           char j,k;
     24          
     25            for (j=0; j< 6; j++)
   \   00000000   E006               LDI     R16, 6
     26              for (k=0; k<176; k++);
   \                     ??delay20mks_0:
   \   00000002   950A               DEC     R16
   \   00000004   F7F1               BRNE    ??delay20mks_0
     27          }
   \   00000006   9508               RET
     28

Почему Релизовая версия напрочь отмела внутренний цикл фор?
IgorKossak
Цитата(Георгий @ Nov 25 2005, 13:02) *
...Почему Релизовая версия напрочь отмела внутренний цикл фор?

Это результат оптимизации.
Если нужно сделать временнУю задержку - применяйте __delay_cycles(long timeout);
Георгий
А где она описана, какой хедер надо подключить?
И если компилер так бездумно оптимизирует, получается его надо перепроверять?!
dxp
Цитата(Георгий @ Nov 25 2005, 17:42) *
А где она описана, какой хедер надо подключить?
И если компилер так бездумно оптимизирует, получается его надо перепроверять?!

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

Если хочется подавить подобные оптимизации, то можно использовать прямое указание компилятору не оптимизировать, объявив одну из переменных как volatile. Тогда компилятор не будет иметь права делать какие-либо предположения о поведении этой переменной и вынужден будет честно сгенерировать код для нее, даже если этот код ничего с точки зрения компилятора не делает.

Формирование задержки этим способом имеет то неудобство, что сложно предсказать, во сколько тактов реально выльется цикл. Для задания точной задержки в пакете EWAVR имеется специальная intrinsic функцию __delay_cycles(). При ее вызове компилятор сам организует код, формирующий указанную задержку. Чтобы она работала, нужно подключить заголовок inavr.h, иначе компилятор не видит прототипа и ругается.

Т.ч. почитайте, во-первых, доку по С, во-вторых, доку на компилятор - она очень внятная. Удачи.
G}{OST
Цитата(dxp @ Nov 25 2005, 15:02) *
Цитата(Георгий @ Nov 25 2005, 17:42) *

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

Не нужно его постоянно проверять.

Постоянно-то не надо, а вот время от времени - очень даже полезно smile.gif Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.
IgorKossak
Цитата(G}{OST @ Nov 25 2005, 14:15) *
... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.

Предупреждать уже надоело twak.gif
Ещё один скоропалительный вывод - и буду банить.

PS: если руки-не-оттуда, то причём тут компилятор!
G}{OST
Цитата(IgorKossak @ Nov 25 2005, 15:35) *
Цитата(G}{OST @ Nov 25 2005, 14:15) *

... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.

Предупреждать уже надоело twak.gif
Ещё один скоропалительный вывод - и буду банить.

Я имел в виду не применительно к данной ситуации, а вообще. Это не скоропалительный вывод, а плод 5 лет мучений с данным продуктом. Если надо - могу покопаться и для версий ИАРа, начиная от 2.20C до 4.10 перечислить все "огрехи" оптимизатора. Теперь вот дошёл до того, что всегда стараюсь ставить минимальную оптимизацию, если ресурсы позволяют.

ЗЫ. Баньте сразу, что ж вы опять предупреждаете? smile3009.gif
MALLOY2
Цитата(G}{OST @ Nov 25 2005, 15:52) *
Цитата(IgorKossak @ Nov 25 2005, 15:35) *

Цитата(G}{OST @ Nov 25 2005, 14:15) *

... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.

Предупреждать уже надоело twak.gif
Ещё один скоропалительный вывод - и буду банить.

Я имел в виду не применительно к данной ситуации, а вообще. Это не скоропалительный вывод, а плод 5 лет мучений с данным продуктом. Если надо - могу покопаться и для версий ИАРа, начиная от 2.20C до 4.10 перечислить все "огрехи" оптимизатора. Теперь вот дошёл до того, что всегда стараюсь ставить минимальную оптимизацию, если ресурсы позволяют.



НЕ знаю помоему очень ничего у него компилятор, посравнению с другими, скажем с KEIL, и оболочка немного получше, а главное он простой как бробка.

P.S. какие есть докозательства что он "корявый" ?
BVU
Ну и дела здесь...! До сегодняшнего дня (до даннай обсуждаемой темы форума) практически всеми экспертами считалось, что оптимизация кода у IAR - одна из лучших в этом классе! Ну что же если таковой некоторых неустраивает берите другой, о чам спор!? Как говориться "на вкус и на цвет ...". А еще оптимальнее писать на ASM - изначально...
Правильный подход любой оптимизации к грамотно написанному коду. Если Ваш алгоритм выражен примитивами по стандарту языка, то никакой корявости при использовании оптимизации небудет! Подобная тема уже обсуждалась на форуме AVR (для IAR). Не ленитесь пользоваться поиском и 'поднимать проработанный материал'.
Георгий
Я согласен, что "одна из лучших", но это еще не значит, что "идеальная" и ей надо доверять на 100%.
dxp
Цитата(G}{OST @ Nov 25 2005, 18:15) *
Цитата(dxp @ Nov 25 2005, 15:02) *

Цитата(Георгий @ Nov 25 2005, 17:42) *

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

Не нужно его постоянно проверять.

Постоянно-то не надо, а вот время от времени - очень даже полезно smile.gif Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.

Глюки есть у всех. У ИАРа отличный компилятор и замечательный оптимизатор - лучший в своем классе. Всегда работаю с максимальным уровнем оптимизации, проблемы бывали, но не фатальные и не связанные именно с максимальным уровнем оптимизации. Как раз на максимальном уровне глюков меньше, чем на средних. Работаю с ИАРом с 1998 года, ни разу не пожалел.
IgorKossak
Цитата(dxp @ Nov 25 2005, 16:32) *
...
Глюки есть у всех. У ИАРа отличный компилятор и замечательный оптимизатор - лучший в своем классе. Всегда работаю с максимальным уровнем оптимизации, проблемы бывали, но не фатальные и не связанные именно с максимальным уровнем оптимизации. Как раз на максимальном уровне глюков меньше, чем на средних. Работаю с ИАРом с 1998 года, ни разу не пожалел.

Аналогично.
Начинал с версии 1.30.
High Voltage
Не могу понять. Поставил сначала WinAVR 20050214, reboot, поставил AVR Studio 4.12. Захожу в плагины, там WinAVR нету, может не понимаю я чего. Там GCC есть, но он там и без WinAVR был. Как дальше то?
High Voltage
Не могу понять. Поставил сначала WinAVR 20050214, reboot, поставил AVR Studio 4.12. Захожу в плагины, там WinAVR нету, может не понимаю я чего. Там GCC есть, но он там и без WinAVR был. Как дальше то?
High Voltage
Вышлите мне лечилку пожалуйста на IAR EWAVR 4.11a на null@inpron.ru.
High Voltage
Почему тема не обновляется? angry.gif
Георгий
Все же IAR классная штука! Разобрался с основами за вечер и программу с ассемблера на Си перевел! Есть, конечно, отдельные моменты типа
Код
....
MOV R24, R16
MOV R16, R24
...

но в целом я им очень доволен. Кодит очень оптимально, код от ассемблерного практически не отличается. Есть отдельные нюансы в работе, но это уже от моего незнания конкретно IAR-а.
Удобно, что сразу можно получить .dbg для прогона в AVR Studio и .hex для заливки.
Вобщем, процесс пошел гораздо быстрей.
Rash
Цитата(Георгий @ Nov 28 2005, 09:45) *
Все же IAR классная штука! Разобрался с основами за вечер и программу с ассемблера на Си перевел! Есть, конечно, отдельные моменты типа
Код
....
MOV R24, R16
MOV R16, R24
...

но в целом я им очень доволен. Кодит очень оптимально, код от ассемблерного практически не отличается. Есть отдельные нюансы в работе, но это уже от моего незнания конкретно IAR-а.
Удобно, что сразу можно получить .dbg для прогона в AVR Studio и .hex для заливки.
Вобщем, процесс пошел гораздо быстрей.


Оптимизация поставь хотя бы medium и
Код
MOV R24, R16
MOV R16, R24

пропадёт.
Георгий
Цитата
Оптимизация поставь хотя бы medium и

MOV R24, R16
MOV R16, R24

пропадёт.

Это как раз в Release варианте с полной оптимизацией.
Rash
Цитата
Это как раз в Release варианте с полной оптимизацией.

Так Release в МК и надо зашивать, а Debug это отладочная версия.
Георгий
Так я и говорю, что в релизной прошивке этот код встретил!!!
haker_fox
Цитата
Так я и говорю, что в релизной прошивке этот код встретил!!!

Интересно! А можно чуть больше кода выше и ниже от приведенной позиции листинга? Что там за контекст?
Георгий
К сожалению, нет. Этот модуль я перелопатил практически полностью, и этого глюка уже не встретил. В остальных модулях этого не было. Ну что ж, даже лучше. Будем считать это случайностью. С кем не бывает! (Даже с хорошим компилятором)
Георгий
Вопрос по опциям ИАРа - char можно сделать по умолчанию беззнаковым, а про int я такого не нашел, возможно ли это. А то у меня получилось, что 0х8000 < 0, т.е. по умолчанию int идет со знаком.
Rash
Цитата(Георгий @ Nov 28 2005, 15:03) *
Вопрос по опциям ИАРа - char можно сделать по умолчанию беззнаковым, а про int я такого не нашел, возможно ли это. А то у меня получилось, что 0х8000 < 0, т.е. по умолчанию int идет со знаком.


Переопредели типы typedef (ом) если надо. и сделай WORD, DWORD и т.д.

Код
typedef unsigned char       BYTE;      
typedef unsigned char       WORD
Георгий
Так я так и делаю, только в последнем примере не char а int. Просто, для char сделана специальная галочка, а про int не подумали. В "большом" Си int по умолчанию беззнаковый.
IgorKossak
Георгий, обычно программисты стремятся к независимости своих программ от конкретного компилятора или среды.
Rash для этого указал Вам приемлемое решение.
Стандарт MISRA, кстати, тожеэто рекомендует.
Вы же наоборот пытаетесь сделать Ваш проект зависимым от "галочек" среды.
Что касается знаковости типов, то насколько я помню, согласно стандарта только char по умолчанию беззнаковый, а int и long - знаковые.
Или я ошибаюсь?
Георгий
Я думаю, что Вы правы , спорить не буду. В тонкостях Си я еще не силен.smile3046.gif
Уточнился по борладндовскому хэлпу (Билдер), там сказано что и char по умолчанию знаковый. В IAR-е видимо для таких как я галочку поставили, чтоб хоть с char поначалу не заморачиваться. Привыкли, что в железе знаков нет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.