High Voltage
Nov 22 2005, 10:28
Что лучше и где взять, чтобы совмещать Асс и С/С++ под AVR? Никак не пойму, можно ли в AVR Studio писать на С/С++?
G}{OST
Nov 22 2005, 10:35
Цитата(High Voltage @ Nov 22 2005, 13:28)

Что лучше и где взять, чтобы совмещать Асс и С/С++ под AVR? Никак не пойму, можно ли в AVR Studio писать на С/С++?
1.
IAR2. Нет
starter48
Nov 22 2005, 10:35
Цитата(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 писать на С/С++?
Писать можно. Компилировать нельзя
High Voltage
Nov 22 2005, 10:48
А так чтобы для русского человека. Скачал, кр*кнул, и полная версия. ЧТобы и писать и компилить и отлаживать, ну и ессно программировать сами контроллеры можно было (AVR ISP)? ИАР то можно надыбать на халяву?
А для AVR Studio можно чем нить компилить? Компилятор там?
starter48
Nov 22 2005, 10:59
Цитата(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
Nov 22 2005, 11:16
Спасибо! Будем париться.
P.S.: Про ломалку я как-то и не увидел строчку, извиняюсь!
Все зависит от того сколько много Вы делали проектов на С/C++ и какие ранее программные продукты использовали.
Существует IAR, ICC, CodeVision, avr-gcc и наконец VisualASM (что конечно к C отношения не имеет, но так к слову).
Все рекомендуют IAR, я тоже его советую, т.к. этот инструмент наиболее универсален для создания проектов для AVR. При достаточно серьезном освоении этого программного продукта работать на нем становиться легко и удобно, как если бы Вы использовали VC для создания программ на PC.
Цитата(High Voltage @ Nov 22 2005, 14:28)

Никак не пойму, можно ли в AVR Studio писать на С/С++?
В последней версии AVRstudio включен плагин для совместной работы с GCC или WINAVR (один из них должен быть установлен), что позволяет писать программы на Си непосредственно в студии
AndyBig
Nov 22 2005, 16:28
Эх... Есть одно неудобство у IAR после VC

. Он не предлагает автоматом список членов класса и структур после операторов "." и "->"

.
High Voltage
Nov 22 2005, 16:38
Писать я писал много на Ms VS 5.0, 6.0, 7.0 (.NET). И консоли, и графику, и окна, как то на MFC так и WinAPI, так что с С/С++ у меня всё хорошо. Окна и на чистом С писал.
Удобнее всего наверное в самой AVR Studio писать и компилить. А что за плагин?
А, скачал IAR, пока не разобрался, времени не было (в универе был).
Писал, правда совсем малость, на С под ARM в IAR.
И можно ли проект делать совместно Асс и С? В IAR ARM я знаю можно.
Попробуй ICC AVR. Мож понравится...
http://www.imagecraft.com/software/demos.htmlЛечилки вроди нету пока, есть отматывалка времени.
sav6622
Nov 23 2005, 07:44
Прекрасно можно писать в С в самой среде AVRStudio, в последней версии действительно плагин поставили, перед установкой AVRStudio нужно поставить пакет WinAVR. Студия его автоматичеки подхватит при установке.
Кстати стало достаточно удобно... отлаживаешься тут же в симуляторе... прямо по сишному коду... сам написал и отладил небольшой проект на tiny2313
lazycamel
Nov 23 2005, 07:46
Цитата(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-му вопросу сказать не могу.
Цитата(AndyBig @ Nov 22 2005, 22:28)

Эх... Есть одно неудобство у IAR после VC

. Он не предлагает автоматом список членов класса и структур после операторов "." и "->"

.
Так и не используйте его оболочку. У ИАРа главное - компилятор. А редактор лучше внешний взять. Который все это (и многое другое) умеет.
MicronSys
Nov 23 2005, 11:35
Я использую
WinAvr + VMLAB получается хорошая связка
до этого работал на IAR C++ симулятор AVRstudio
WinAvr немного больше код делает на компилит давольно таки хорошо
VMLAB очень хороший симулятор правда не без хрехов
Vict59
Nov 24 2005, 06:12
Использую IAR C 2.28 (написания кода) + AVRstudio (для отладки, проверки временных интервалов). ИМХО очень хорошая "парочка".
Георгий
Nov 24 2005, 13:22
А есть ли какая-то литература (желательно русская) по IAR? По чему лучше его освоить?
dimka2001
Nov 24 2005, 14:51
Лучше всего codevision!!!
haker_fox
Nov 25 2005, 00:32
Цитата
А есть ли какая-то литература (желательно русская) по IAR? По чему лучше его освоить?
К сожалению не находил, когда пытался освоить IAR. Но к тому времени я уже немного знал английский (очень не много) и потихоньку разбирал мануал пользователя. Там все доходчиво сказано. Если у Вас возникнут вопросы, я думаю на них смогут ответить на этом форуме, потому, что там (в IAR) все на самом деле очень просто.
На счет освоить... Я сначала открыл и скомпилировал пример, который прилагается к дистрибутиву IAR, затем с нуля начал свой проект, по пути знакомясь с особенностями IAR EWAVR.
Георгий
Nov 25 2005, 05:10
Спасибо. Видимо, пока у меня будет наоборот, быстрые проекты - на ассемблере, когда время не поджимает - на Си.
Вопрос возник. Когда пробовал WinAvr, он выдавал полный листинг с сишными кодами и ассемблерной реализацией всего проекта в целом. А IAR уменя выдает листинги только по модулям, а цельную картину не могу получить. Это он в принципе не может или я что-то не доделываю?
IgorKossak
Nov 25 2005, 09:07
Цитата(Георгий @ Nov 25 2005, 07:10)

...Вопрос возник. Когда пробовал WinAvr, он выдавал полный листинг с сишными кодами и ассемблерной реализацией всего проекта в целом. А IAR уменя выдает листинги только по модулям, а цельную картину не могу получить. Это он в принципе не может или я что-то не доделываю?
Цельная картина складывается после сборки проекта, но в IAR-овском линкере не предусмотрена такая возможность (а может я ей просто не пользуюсь

).
Если бы Вы сказали зачем оно нужно, то может можно было бы поискать обходные манёвры, например:
- загрузить проект в отладчик IAR и вызвать окно дизассемблера;
- загрузить проект в AVRStudio и далее так же.
Георгий
Nov 25 2005, 10:01
В WinAVR-е было удобно контролировать, что компилится и как реализуются какие-то куски программы (после чего я его и покинул). Просто у меня начались временные расхождения в программах, отлаживаемых в разных системах, вот и хотелось бы иметь этот ассемблереый код. Но похоже такого вообще нет. Перерыл все что идет с IAR, все установки поперепробовал, но увы мне
Георгий
Nov 25 2005, 11:02
Столкнулся с непоняткой компиляции 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, 11:24
Цитата(Георгий @ Nov 25 2005, 13:02)

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

А где она описана, какой хедер надо подключить?
И если компилер так бездумно оптимизирует, получается его надо перепроверять?!
Не нужно его постоянно проверят. Нужно немножко подучить язык. У Вас цикл ничего не делает и компилятор его выкидывает, т.к. с его точки зрения (с точки зрения языка) с циклом или без - результат работы программы один и тот же. Но без цикла она работает быстрее и ее размер меньше. Поэтому компилятор и выкидывает этот цикл. Напишите в цикле код, который делает полезную работу и компилятор ничего выкидывать не будет.
Если хочется подавить подобные оптимизации, то можно использовать прямое указание компилятору не оптимизировать, объявив одну из переменных как volatile. Тогда компилятор не будет иметь права делать какие-либо предположения о поведении этой переменной и вынужден будет честно сгенерировать код для нее, даже если этот код ничего с точки зрения компилятора не делает.
Формирование задержки этим способом имеет то неудобство, что сложно предсказать, во сколько тактов реально выльется цикл. Для задания точной задержки в пакете EWAVR имеется специальная intrinsic функцию __delay_cycles(). При ее вызове компилятор сам организует код, формирующий указанную задержку. Чтобы она работала, нужно подключить заголовок inavr.h, иначе компилятор не видит прототипа и ругается.
Т.ч. почитайте, во-первых, доку по С, во-вторых, доку на компилятор - она очень внятная. Удачи.
G}{OST
Nov 25 2005, 12:15
Цитата(dxp @ Nov 25 2005, 15:02)

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

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

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

... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.
Предупреждать уже надоело
Ещё один скоропалительный вывод - и буду банить.
PS: если руки-не-оттуда, то причём тут компилятор!
G}{OST
Nov 25 2005, 12:52
Цитата(IgorKossak @ Nov 25 2005, 15:35)

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

... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.
Предупреждать уже надоело
Ещё один скоропалительный вывод - и буду банить.
Я имел в виду не применительно к данной ситуации, а вообще. Это не скоропалительный вывод, а плод 5 лет мучений с данным продуктом. Если надо - могу покопаться и для версий ИАРа, начиная от 2.20C до 4.10 перечислить все "огрехи" оптимизатора. Теперь вот дошёл до того, что всегда стараюсь ставить минимальную оптимизацию, если ресурсы позволяют.
ЗЫ. Баньте сразу, что ж вы опять предупреждаете?
MALLOY2
Nov 25 2005, 13:07
Цитата(G}{OST @ Nov 25 2005, 15:52)

Цитата(IgorKossak @ Nov 25 2005, 15:35)

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

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

Цитата(dxp @ Nov 25 2005, 15:02)

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

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

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

...
Глюки есть у всех. У ИАРа отличный компилятор и замечательный оптимизатор - лучший в своем классе. Всегда работаю с максимальным уровнем оптимизации, проблемы бывали, но не фатальные и не связанные именно с максимальным уровнем оптимизации. Как раз на максимальном уровне глюков меньше, чем на средних. Работаю с ИАРом с 1998 года, ни разу не пожалел.
Аналогично.
Начинал с версии 1.30.
High Voltage
Nov 26 2005, 22:16
Не могу понять. Поставил сначала WinAVR 20050214, reboot, поставил AVR Studio 4.12. Захожу в плагины, там WinAVR нету, может не понимаю я чего. Там GCC есть, но он там и без WinAVR был. Как дальше то?
High Voltage
Nov 26 2005, 22:17
Не могу понять. Поставил сначала WinAVR 20050214, reboot, поставил AVR Studio 4.12. Захожу в плагины, там WinAVR нету, может не понимаю я чего. Там GCC есть, но он там и без WinAVR был. Как дальше то?
High Voltage
Nov 26 2005, 22:27
Вышлите мне лечилку пожалуйста на IAR EWAVR 4.11a на null@inpron.ru.
High Voltage
Nov 27 2005, 20:16
Почему тема не обновляется?
Георгий
Nov 28 2005, 05:45
Все же IAR классная штука! Разобрался с основами за вечер и программу с ассемблера на Си перевел! Есть, конечно, отдельные моменты типа
Код
....
MOV R24, R16
MOV R16, R24
...
но в целом я им очень доволен. Кодит очень оптимально, код от ассемблерного практически не отличается. Есть отдельные нюансы в работе, но это уже от моего незнания конкретно IAR-а.
Удобно, что сразу можно получить .dbg для прогона в AVR Studio и .hex для заливки.
Вобщем, процесс пошел гораздо быстрей.
Цитата(Георгий @ Nov 28 2005, 09:45)

Все же IAR классная штука! Разобрался с основами за вечер и программу с ассемблера на Си перевел! Есть, конечно, отдельные моменты типа
Код
....
MOV R24, R16
MOV R16, R24
...
но в целом я им очень доволен. Кодит очень оптимально, код от ассемблерного практически не отличается. Есть отдельные нюансы в работе, но это уже от моего незнания конкретно IAR-а.
Удобно, что сразу можно получить .dbg для прогона в AVR Studio и .hex для заливки.
Вобщем, процесс пошел гораздо быстрей.
Оптимизация поставь хотя бы medium и
Код
MOV R24, R16
MOV R16, R24
пропадёт.
Георгий
Nov 28 2005, 07:24
Цитата
Оптимизация поставь хотя бы medium и
MOV R24, R16
MOV R16, R24
пропадёт.
Это как раз в Release варианте с полной оптимизацией.
Цитата
Это как раз в Release варианте с полной оптимизацией.
Так Release в МК и надо зашивать, а Debug это отладочная версия.
Георгий
Nov 28 2005, 07:32
Так я и говорю, что в релизной прошивке этот код встретил!!!
haker_fox
Nov 28 2005, 07:39
Цитата
Так я и говорю, что в релизной прошивке этот код встретил!!!
Интересно! А можно чуть больше кода выше и ниже от приведенной позиции листинга? Что там за контекст?
Георгий
Nov 28 2005, 07:58
К сожалению, нет. Этот модуль я перелопатил практически полностью, и этого глюка уже не встретил. В остальных модулях этого не было. Ну что ж, даже лучше. Будем считать это случайностью. С кем не бывает! (Даже с хорошим компилятором)
Георгий
Nov 28 2005, 11:03
Вопрос по опциям ИАРа - char можно сделать по умолчанию беззнаковым, а про int я такого не нашел, возможно ли это. А то у меня получилось, что 0х8000 < 0, т.е. по умолчанию int идет со знаком.
Цитата(Георгий @ Nov 28 2005, 15:03)

Вопрос по опциям ИАРа - char можно сделать по умолчанию беззнаковым, а про int я такого не нашел, возможно ли это. А то у меня получилось, что 0х8000 < 0, т.е. по умолчанию int идет со знаком.
Переопредели типы typedef (ом) если надо. и сделай WORD, DWORD и т.д.
Код
typedef unsigned char BYTE;
typedef unsigned char WORD
Георгий
Nov 28 2005, 11:50
Так я так и делаю, только в последнем примере не char а int. Просто, для char сделана специальная галочка, а про int не подумали. В "большом" Си int по умолчанию беззнаковый.
IgorKossak
Nov 28 2005, 12:41
Георгий, обычно программисты стремятся к независимости своих программ от конкретного компилятора или среды.
Rash для этого указал Вам приемлемое решение.
Стандарт MISRA, кстати, тожеэто рекомендует.
Вы же наоборот пытаетесь сделать Ваш проект зависимым от "галочек" среды.
Что касается знаковости типов, то насколько я помню, согласно стандарта только char по умолчанию беззнаковый, а int и long - знаковые.
Или я ошибаюсь?
Георгий
Nov 28 2005, 13:08
Я думаю, что Вы правы , спорить не буду. В тонкостях Си я еще не силен.

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