Хотел бы я знать, как думают другие люди. И почему очевидные для одного человека вещи не кажутся таковыми другому и наоборот. Многих начинающих программистов микроконтроллеров IAR AVR отпугивает множеством настроек и отсутствием информации на русском языке. Этот пошаговый мануал покажет вам, что IAR не так уж и страшен.


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


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

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

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

Разрешаем использование имен битов определенных в хедер файле
В 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.

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

С первого взгляда там черти че. Но если знаешь ассемблер, то легко разберешься.
Запускаем IAR AVR. Откроется окно Embedded Workbench Startup, можно создать проект ипользуя его, но мы пойдем другим путем, поэтому жмем Cancel. Окно закроется и перед нами во всей своей невзрачной красе предстанет IAR.
Выбираем в верхнем меню Project > Create New Project…

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


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



Выбираем тип микроконтроллера
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



[code] [/code]