IAR AVR. Пошаговый мануал по созданию первого проекта

04/11/2009 - 21:28
   Запускаем IAR AVR. Откроется окно Embedded Workbench Startup, можно создать проект ипользуя его, но мы пойдем другим путем, поэтому жмем Cancel. Окно закроется и перед нами во всей своей невзрачной красе  предстанет IAR.
   Выбираем в верхнем меню Project > Create New Project…



IAR предложит выбрать тип шаблона проекта (Project templates). Выбираем C > main и кликаем Ок. 



В стандартном Save As диалоге находим или создаем папку и сохраняем проект. Проект готов. Приглядимся к IARу.



   Верхняя строка – почти стандартный menu bar. Ниже - tool bar с кнопками.
   С правой стороны находится редактор кода. Сейчас там открыт файл main.c, но в нем только пустая функция main().
   С левой стороны расположено окно рабочего пространства (workspace), в котором отображается структура проекта. Любой IARовский проект  должн находиться по-крайней мере в одном рабочем пространстве.  
   В верхней части рабочего пространства находится выпадающее меню. Это так называемые конфигурации проекта. По умолчанию их две – Debug и Release. Они отличаются между собой настройками проекта. Можно создавать свои конфигурации.
 
   Сохраним рабочее пространство. Если не сделаем сейчас, придется делать это на этапе компиляции. Выбираем в меню File > Save Workspace



   Зададим настройки проекта для конфигурации Debug. Выбираем в меню Project > Options



или кликаем правой кнопкой мышки по галочке напротив названия проекта.



Откроется диалоговое окно с множеством настроек.  

Выбираем тип микроконтроллера
General Options > Target > Processor configuration
У меня это ATmega8535.  



Разрешаем использование имен битов определенных в хедер файле
В General Options > System ставим галочку Enable bit definitions in I/O-Include files



Хоть нам и не понадобится сейчас эта настройка, полезно знать где она находится.

Включаем генерацию ассемблерного листинга. Необязательная опция, но я обычно включаю, чтобы посмотреть что натворил компилер.
С/С++ Compiler > List > галочка Output List File



Меняем формат выходного файла
Linker > Output.
B поле Output file cтавим галочку Override default и заменяем расширение d90 на hex
В поле Format выбираем Other и в выпадающем меню Output format выбираем тип файла intel-standart



Жмем ОК.
Теперь копируем и вставляем текст нашей программы в main.c

#include <ioavr.h>
#include <intrinsics.h>

int main(void)
{
  unsigned char led = 1;
  DDRC = 255;
 
  while(1)
  {
    PORTC = ~led;
    __delay_cycles(400000);
    led = led<<1;
    if (led == 0)
      led = 1;
  }
  return 0;
}

Кликаем кнопку Make.

Если все сделано правильно, IAR откомпилирует и соберет проект, а внизу откроется окно Messages.
Все прошло без ошибок. Но компилер выдал warning - statement is unreachable. Ничего страшного – он просто сообщает нам, что функция main никогда не возвратит значение. У нас в программе бесконечный цикл while(1){…} и микроконтроллер при работе никогда не дойдет до строчки return 0.



Ищем файл прошивки в папке проекта и грузим в микроконтроллер.
Если интересно посмотреть на ассемблерный листиг, открываем файл main.lst



С первого взгляда там черти че. Но если знаешь ассемблер, то легко разберешься.

Related items

Comments   

# vasil 2009-11-05 15:41
о, спасибо, актуально =)
# Guest 2010-03-31 12:44
Быстро и понятно
# Guest 2010-05-09 21:07
Обшарил вроде весь сайт, а как грузить прошивку в микроконтроллер не нашёл!
# Pashgan 2010-05-10 12:30
Есть некоторые недостатки, но ученые бьются над этим.
# Serj 2010-05-14 21:18
Спасибо автору, но хотелось бы поподробнее по IAR почитать. Может кто дорогу знает?
# Pashgan 2010-05-18 03:14
Лучшая дорога - чтение официальной документации.
# fzr7 2010-06-11 22:27
У меня IAR 5.5. при компиляции выдает следующее:
Fatal Error[Cp001]: Copy protection check, No valid license found for this product [24]
Error while running C/C++ Compiler
# Wolf 2010-10-17 18:02
1. Запустите "IARID" из папки cr@ck, НА ТОМ КОМПЬЮТЕРЕ,
НА КОТОРОМ ПЛАНИРУЕТСЯ установка программы и запишите Host-ID вашего компьютера.

2. наведите мышу на "IAR" и правой кнопкой выберите "изменить", в появившемся текстовом
файле измените Host-ID на тот который был в "IARID" и сохраните его в файле.

3. После запустите "IAR" и в "serial.txt" сгенерируются кода.

4. Откройте полученный файл любым текстовым редактором и найдите в нем подстроку EWAVR.
Данная сторока и пару строчек до нее будут выглядеть примерно так:

Installserial: XXXX-XXX-XXX-XX XX
Key:
L8L............ ....1OW# "EWAVR" version "2.25_WIN", no expiration date, exclusive

XXXX-XX - какие-то цифры
L8L...... - длиннючая строка из букв и цифр


5. Запустите инсталляцию IAR. Когда он попросит, скопируйте найденные значения:
Цифры из Installserial в поле License#
Всю строку Key в поле License Key.

6. После инсталляции вы получаете Full версию пакета.
# fzr7 2010-06-11 22:41
Нашел более раннюю версию IAR'a 5.20 там все работает.
# fzr7 2010-06-14 07:47
Все исправил. Заработало на IAR 5.5. При установке пакета сделал ошибку. Вопрос снимается.
# Guest 2010-06-16 18:40
Quoting fzr7:
Все исправил. Заработало на IAR 5.5. При установке пакета сделал ошибку. Вопрос снимается.

Как исправили? Это первое, что из программировани я в своей жизни сделал. Пытаюсь начать программировать , но не знаю с чего начать.
# Guest 2010-07-02 08:02
Quoting fzr7:
Все исправил. Заработало на IAR 5.5. При установке пакета сделал ошибку. Вопрос снимается.

Какую???
# Guest 2010-07-20 16:02
Салют всем ищущим! Может кому поможет моя памятка по версии 5.5 для себя самого,какие я пишу,не надеясь на память девичью.

1. Переустановил виндоус сервис-пак 2 на серв.-пак 3.
2. Не стал создавать учётной записи , тем более с применением кириллицы.
3. Прочёл внимательно англоязычное руководство по установке; показалось, что русский перевод слишком упрощённый.
# Guest 2010-07-20 16:03
4. Выполнил поэтапно первые два пункта англоязычной инструкции, ВАТ-файл запускать не стал, т.к. показалось, что в нём
постоянно сидит чужой ID-код компьютера, отличный от моего.
5. Вывел в тхт - файл вышеуказанные параметры и шаг 3 решил игнорировать;ну по крайней мере, со своим айдишником
выработал коды. А запуск ВАТа, как показалось, снова портил код чужим ID, выводимым в консольное окно.
6. Попробовал с ними запустить программу - буд-то бы заработала как описано. Прежнего бреда (о неправильной лицензии)
больше пока не видел.
# Guest 2010-07-20 16:05
Да! Всё делалось только с командной строки, без применения мыши!! IAR kegen.exe - видимо, взлом от предыдущей версии
(оставлен тут для "мебели" чтоли). Его код решительно отвергается этой версией.

Замечу, что не пробовал идти по старым пробам, применив много новшеств (см.выше); и не могу знать, какая мера помогла
и насколько.В итоге всё равно требуются ещё тесты,т.к очень свеженькая версия пока, а по слухам, ломается IAR тяжело.
# Guest 2010-08-31 16:48
Спасибо автору за цикл статей про IAR. Благодаря вашим статьям решил освоить этот замечательный компилятор. Раньше юзал WinAVR и CVAVR теперь дорос и до IARа. В связи с чем вопрос: как заставить IAR компилировать cof файл для работы в AVR Studio
# Guest 2010-08-31 21:28
Coff файл IAR по моему не генерит. Вот здесь описано как сделать открыть IARовский проект в AVR Studio http://chipenable.ru/index.php/iar-embedded-workbench/40-iar-avr-debug.html
# Guest 2010-09-01 14:30
Quoting JoJo:
Coff файл IAR по моему не генерит. Вот здесь описано как сделать открыть IARовский проект в AVR Studio http://chipenable.ru/index.php/iar-embedded-workbench/40-iar-avr-debug.html

Спасибо за ссылку.
# Guest 2010-09-03 17:59
Ещё заметил такие особенности: вместо функции int main (void) {} можно написать как в КодеВижене void main (void) {} тогда return 0; можно убрать - т.к. функция ничего не возвращает и вонинг исчезает.
И ещё в категории proekt > options > C\C++compiler > plain 'char' is по умолчанию стоит галка Unsigned - значит в проекте можно просто писать 'char' компилятор будет принимать его как беззнаковую переменную.
# Pashgan 2010-11-21 23:01
Можно, но лучше тип char использовать с символами и строками, а unsigned char с байтовыми переменными. Тогда твой код будет в меньшей степени зависеть от компилятора.
# Jiri 2010-10-14 15:19
А как в IAR посмотреть сколько прога будет занимать в памяти программ уже на кристалле? При прошивке это видно, но хотелось бы увидеть это сразу после билда. Keil например это показывает.
# Pashgan 2010-11-21 23:03
В map файле.
Включаем опцию генерации map файла
Project > Options... > Linker > List - ставим галочку Generate linker listing
Затем запускаем компиляцию и сборку - F7
В рабочем пространстве (workspace) в папку Output появится map файл.
В конце этого файла и написано сколько байт занимает сгенерированный hex файл.
# гость 2013-01-28 11:38
Или более наглядно после компиляции, но сперва надо "включить" опции:
1. Tool -> Options
Messages: Show build messages -> All
2. Tool -> Options
Project: v Generate browse information

Размер смотреть в окне Build в Messages. Это окно включать, если оно было выключено, View -> Messages -> Build.
# valio 2010-11-19 16:26
Не нашел где и как в окне Disassembler поменять размер шрифта (и семейство если возможно).
# Pashgan 2010-11-21 23:08
Можно поменять только шрифт в редакторе кода, но эти изменения будут распространятьс я и на сишные файлы и на ассемблерные и на lst файлы.
Tools>Options>Editors>Colors and Fonts - Editor Font
# Tony 2010-12-21 18:43
Столкнулся вот с такой проблемой . Flash Magic не понимает hex файл , созданный IARом 5.5 . Demo hex файлы загружаются на ура , а вот когда создаешь сам пишет Invalid hex file . Может кто сталкивался с подобным ?
# JoJo 2010-12-21 20:56
Не сталкивался с такой проблемой. А нельзя поиграться с типами hex файлов. Там есть intel standart и какой то еще..попробуй поменять. Может что измениться.
# Tony 2011-01-02 20:33
Проблема решилась . Неправильно выставил опции проекта . Теперь возникла следующая - нужно получить сигнал на выходе какого - нибудь порта . Сколько примеров не пробовал - пока не заработало . Может кто кинет ссылку на простенький проект . Пишу для NXP LPC2478
# eric 2011-01-13 21:48
У меня стоит версия ИАР 5.50 Писал простые проги на нём.А в основном пользовался AVRSimulatorRid e от OshonSoft. Это такой бейсик можно без напряжения работать с ПИк и с АВР. Но там не очень можно можно работать с массивами и указателями.
Мне нужно подсчитать CRC 8 по полиному Фирма выдаёт алгоритм как считать,но я в старой проге не могу это сделать. Как представить в ИАР массив[256] во флэш,а указатель на него в RAM.
# Pashgan 2011-01-18 19:30
Code:
#include <ioavr.h>
#include <intrinsics.h>
...
__flash unsigned char array[256];
unsigned char __flash* pointer = array;
# Tony 2011-01-18 13:08
Новая проблема - не работает русский шрифт при загрузке в LPC2478 . Латинский нормально , а русский игнорирует . Просто пробелы ставит вместо русских букв
# Pashgan 2011-01-18 19:53
Не знаю правильный ли этот вариант, но попробовать можно. Открой файл IARовского проекта (это файл с расширением*.ew p) в текстовом редакторе и смени кодировку в первой строке.
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
# Гена 2011-02-20 01:59
Мутатня-этот IAR. Отлаживая программу вживую на железе, доходит до функции __delay_cycles( 400000) и начинает в ней исполняться. Вобщем ждал 10 минут. Из подпрограммы так и не вышел IAR, всё молотит и молотит циклы. Codevision + AVR Studio всё работает без проблем. Да и команды пошагово выполняются гггораздо быстрее, чем в IAR/ Одним словом - несколько тышь баксов за IAR может отдать тока полный придурок. И не надо говорить(отключ айте функции задержки). У меня их в проекте может быть 15-20-30, да и хочется, чтобы проект в отладке на железе работал как положено-это критично для прерываний. Вобщем от IAR пока тока разочарование.
# Pashgan 2011-02-20 08:00
Учите матчасть и никакого разочарования не будет.
# Гена 2011-02-20 14:18
Точьно мутатня. В железе стоит mega88A/ Вчера отладчик IAR ругался, что у меня MEGA88P/ Пришлось установить cpu=m88p/ Сегодня уже определяет в железе MEGA88 ну и ёсно конектится не хочет. Пипец полный. Codevision + AVRStudio пока единственное, нормальное решение. /
# Pashgan 2011-02-23 13:51
А что за отладчик?
# Гена 2011-02-20 14:28
Sun Feb 20 17:26:50 2011: Wrong CPU was detected. It is not a ATmega88P device, (Found device ATmega88, id: 0x930A)
# василь 2011-03-07 04:19
начинаю с мигания лампочек - всё получилось, спасибо за хорошие статьи :-) , здорово.
# anonymous 2011-09-15 06:24
Quote:
Но компилер выдал warning - statement is unreachable.
Чтобы варнинг не выдавал нужно перед int main поставить __C_task, а return убрать, т.е. вот так

__C_task int main()
{
while(1){}
}
# IURY 2011-11-12 04:47
IAR_v5.501. Столкнулся с проблемкой:
Включае. генерацию ассемблерного листинга. С/С++ Compiler > List > галочка Output List File - выдаёт ошибку
Error[Ms003]: could not open file "C:\Temp\Projec t_C(IAR_EW)\Deb ug\List\main.ls t" for writing
Internal Error: [CoreUtil/Gener al]: Unexpected windows exception (0xe06d7363) at 7C812AFB
Error while running C/C++ Compiler
Галочку уберу -компилирует и ошибок нет.
Подскажите.
# гость 2 2012-01-22 09:58
прежде всего тоже хочу выразить спасибо за интересные статьи. первый проект осилил: светодиод замигал. теперь вот хочется дальше продвинуться :-? придумал для себя проектик -а вот сделать не знаю как, может кто поможет с программой, алгоритм такой: два переключателя подключены к двум ножкам порта -замыкать можно на общий провод, и светодиод с резистором подключен к другой ножке этого-же порта и катодом на общий провод. хочется чтоб переключателями можно было управлять частотой мигания светодиодом, -частоты ну просто условно скажем 3100Гц, 2300Гц, 2500Гц, интересует принцип как такое можно сделать, -ну и пример программы с пояснениями для чайника. спасибо.
# 63ru 2012-12-15 18:47
настроил проект как указано здесь.
v6.3.3

компиляция без ошибок а вот маке ошибка!!
Fatal Error[e72]: Segment CODE must be defined in a segment definition option (-Z, -b or -P)

как подправить?


код:
#include
#include

int main( void )
{

DDRB |= (1
# Pashgan 2012-12-17 19:19
У меня нет этой версии под рукой, но попробуй сделать так. Выбери меню Project>Options , раздел Linker, вкладка Config. В рамке Linker command file сними галочку Override Default.Эта опция определяет какой командный файл будет использоваться для линкера. В этом файле задаются границы областей памяти микроконтроллер а. Если галочка установлена этот файл нужно задавать самому, если снята используются настройки по умолчанию.
# 63RU 2012-12-19 18:42
Спасибо за помощь..

в забыли указать что при выборе во кладке:
Linker\\Output галочку other intel-standart, то тогда дебагер не работает...
# Pashgan 2012-12-19 20:32
да, есть такое дело.
# AMV2000 2013-01-13 11:34
А где в проекте IAR устанавливается тактовая частота МК?
# Pashgan 2013-01-13 16:08
Там нет такой настройки.
# AMV2000 2013-01-13 16:47
Тогда каким образом,програм ма узнает какой кварц у нас установлен?В функции main ничего нет...
# Pashgan 2013-01-14 11:09
Пока пользователь не пропишет ее руками, например так #define F_CPU 16000000, программа не узнает.
# гость 2013-01-17 09:15
help
Пытаюсь перебраться из CodeVisionAVR.
Там работало, например:
Code:PORTB = 0b01001101; //BIN
в IAR только так:
Code:PORTB = 0x4D; //HEX
PORTB = 77; //DEC

Мне в BIN удобнее чем в HEX,DEC, более нагляднее, но такая запись не работает у меня. Не пойму почему. И в хелпе IAR не могу найти описания про Bit Variables или про Data Types, как, например, это есть в хелпе CVAVR.
Спасибо.
# JoJo 2013-01-17 12:46
Можно сделать макросы и определить все числа от 0 до 255 в двоичном виде.
Code:
#define b00000001 1
#define b00000010 2
...
# kuksik 2013-07-18 07:08
Вроде пошагово сделал.
Компиляция примера прошла без ошибок, а hex не создается.
В чем может быть проблема?

Building configuration: new - Release
Updating build tree...
main.c
Warning[Pe111]: statement is unreachable C:\proect\ipad\ main.c 18
Linking
Error[e12]: Unable to open file 'new.hex'
Error while running Linker

Total number of errors: 1
Total number of warnings: 1
# JoJo 2013-07-18 07:44
Попробуй проект не на диске C разместить, а на каком нибудь другом. Может IARу операционная система не позволяет на C создавать файлы?
# kuksik 2013-07-18 18:00
помогло,спасибо !
# Freerider 2014-05-26 15:39
Начал разбирать IAR тот код которой он производит в AVR Studio и заметил что он устанавливает не то начало мне стека
вот выкладка с авр студии
Code:
@0000007F: ?C_STARTUP
+0000007F: E90F LDI R16,0x9F Load immediate
+00000080: BF0D OUT 0x3D,R16 Out to I/O location
+00000081: E000 LDI R16,0x00 Load immediate
+00000082: BF0E OUT 0x3E,R16 Out to I/O location

и стек здесь он начинает с 0x9f а должен с 0x45f может это где то поправимо в Option подскажите
# Freerider 2014-05-26 16:05
Уже нашел в в Options окно General Options вкладка System в строке Data Stack Size bytes нужно проставить 0x3e0 тогда стек будет равен 0x45f до этого стояло 0x20
но к этому пришел методом расчета а как оно получается что 0x20 это запись в SPL 0x9f непонятно
# _Артём_ 2014-05-26 16:24
Quoting Freerider:
Уже нашел в в Options окно General Options вкладка System в строке Data Stack Size bytes нужно проставить 0x3e0 тогда стек будет равен 0x45f до этого стояло 0x20
но к этому пришел методом расчета а как оно получается что 0x20 это запись в SPL 0x9f непонятно

Так просто не выйдет - нужно менять и скрипт линкера. Вы же всю память под стек возвратов отдали... Как IAR глобальные переменные будет выделять? места-то нет.
# Freerider 2014-05-30 05:51
Да при постановке в програмку переменных IAR выдал ошибку что не хватает ему места для них.А так я уже вывел формулу что IAR будет записывать в регистр SP в звисимости от наших занчений CSTACK и RSTACK.
Например у нас CSTACK 0x20 и RCTASK 16 тогда в SP запишется
0x59(адрес 0x60 начало озу под переменные включительно)+0 x20+16*2=0x9f.П росто в начале я думал что IAR будет гнать адреса возврата от вершины 0x45f вниз, а данные загонять навстречу от 0x60, но оказалось что данные помещаются в озу после адреса стека возврата.
# _Артём_ 2014-05-30 09:06
Quoting Freerider:
IAR будет гнать адреса возврата от вершины 0x45f вниз, а данные загонять навстречу от 0x60

Можно и так настроить, только какой в этом смысл? Главное выбрать достаточные размеры стеков, а где они расположены не так уж и важно. Трудно сказать что хуже - чтобы стек наезжал на "чужую" облать ОЗУ или на пространство регистров ввода-вывода. И так и так глючить будет, разве что по-разному.
# ZERO 2014-07-29 19:02
В IAR нет готовых библиотек для работы с переферией (spi, i2c, ds1820 и т.д.) таких как в CodeVision?
# _Артём_ 2014-07-30 06:19
Quoting ZERO:
В IAR нет готовых библиотек для работы с переферией (spi, i2c, ds1820 и т.д.) таких как в CodeVision?

Нет, в IAR нет таких библиотек. Какие-то библиотеки для периферии можно найти у Atmel-а в ASF. Но многое и самому написать несложно.

У вас недостаточно прав для комментирования.