IAR Embedded Workbench for AVR. Быстрый старт.
IAR — это один из лучших компиляторов С/С++ для множества микроконтроллеров, начиная от 8051 и заканчивая продвинутыми ARMами. Про создание проектов для ARM уже писали в учебном курсе имени этого же контроллера, я же напишу про создание проекта для AVR, особенностей работы и отладки в нем. Для avr существует 2 версии — бесплатная, с ограничением по коду до 4кБ и полная с 30-и дневным триалом.
Так же не трудно найти вылеченную. Какую выбрать каждый решит для себя сам, скажу только что для нормальной работы вылеченной нужно запрещать программе выход в интернет.
Запускаем IAR AVR. Откроется окно Embedded Workbench Startup, можно создать проект ипользуя его, но мы пойдем другим путем. Что мне нравится в Eagle Cad, так это большое количество готовых библиотек. Однако рано или поздно все равно возникает момент, когда нужного.
Последняя на данный момент версия 5. 51. Ее я и буду использовать.
Настройка среды. После установки стоит сделать начальные настройки среды. 1. Tools->Options.
ТОРГОВЫЕ МАРКИ. IAR Embedded Workbench, IAR visualSTATE, IAR MakeApp и IAR. Инструкции оконного интерфейса IAR Embedded. Workbench.
В Messages в пункте Show build messages выбрать тип All. После этого при компиляции будет выводиться информация о размере программы и данных. 2. Т. среда не поддерживает программаторы типа AVR ISP, то стоит к ней прикрутить внешний программатор, например SinaProg.
Для этого жмем Tools->Configure Tools. Настройки там понятны и без объяснений. Строку Initial Directory можно оставить пустой или указать в ней путь к выходным файлам текущего проекта. Тогда после запуска сразу будет выбираться папка с прошивкой. В принципе для этого предназначена галка Redirect to Output Window. с которой путь должен автоматом подставляться для текущего проекта.
Но у меня она почему-то не заработала. Создание проекта. Запускаем IAR Embedded Workbench и видим главное окно программы:. Выбираем в меню — Project->Create New Project.
Компиляторы IAR Embedded Workbench представляют собой среду разработки верхнего уровня. Это мощный, но вместе с тем простой и очень. Справочное руководство IAR под ARM - Микроконтроллеры, Тема 1074550. IAR под ARM. IAR Embedded Workbench for ARM / 700 MB. IAR Embedded Workbench с оптимизацией C и C компилятор представляет собой Инструкция по установке и ключики внутри. Скачать.
В появившемся окне можно выбрать язык (ASM, C, C++) и тип проекта. Совместимость с AVR Studio нам не к чему, поэтому создадим приложение на обычном С. Программа сразу предложит сохранить полученный проект. Сохраняем и получаем на выходе следующий сгенерированный код:. Да, iar точно знает, что краткость сестра таланта:) Пользоваться этим пока не возможно, поэтому можно переходить к настройкам проекта.
- IAR Embedded Workbench — это интегрированная отладочная среда разработки приложений (IDE), обладающая рядом неоспоримых преимуществ.
- IAR Systems, IAR Embedded Workbench, C-SPY, visualSTATE, From Idea To This guide describes version 5.3x of the IAR Embedded Workbench ® IDE for.
Настройка проекта. Выбираем в меню — Project->Options. или жмем Alt+F7 и видим первое окно настроек:. Обязательно выбираем тип используемого процессора.
Тип памяти влияет на размер адреса переменных в памяти данных. У модели tiny — 1 байт на адрес, у small — 2 байта. Далее переходим к вкладке С/С++ Compiler:.
В принципе по началу тут можно ничего и не трогать, но про самые основные вкладки сказать стоит. В Plain 'char' is выбирается тип переменной char по умолчанию — со знаком или нет.
В Optimization как нетрудно догадаться выбирается тип и уровень оптимизации. И на вкладке List можно включить опцию генерации ассемблерного листинга.
И последняя, весьма важная вкладка — Linker. По умолчанию линкер создает свой, весьма специфический, файл с расширением *.
d90. Со всей отладочной информацией и прочей кучей мусора. Прошивать его в контроллер напрямую нельзя, поэтому вывод необходимо перенастроить.
Тут есть 2 пути:. 1. Переназначить типы выходных файлов во что-то стандартное.
Но тут есть свои тонкости. Например, если на вкладке Output сделать выходной файл intel-standart, то потеряется возможность символьной отладки. Т. отлаживать через листинг радости мало, то нужно ставить тип выходного файла в debug-intel-std, а на вкладке Extra Output уже выбирать intel-standart. Тогда будет и нормальная отладка в симуляторе и готовый выходной файл для прошивки.
Но если в программе используются переменные из eeprom, то получим ошибку линкера. Поэтому всегда лучше использовать второй путь.
2. Если в программе используется eeprom, то линкеру надо сообщить что ему необходимо создать 2 файла. Для этого сразу переходим к последней вкладке Extra Options. разрешаем использовать их и в поле вводим:.
В результате получим на выходе 3 файла:. *. d90 — для отладки. *. eeprom.
hex — для прошивки eeprom. *. flash. hex — сама прошивка.
На этом настройку проекта можно считать законченной и переходить к написанию программы. Написание Hello World. На самом деле писать программу мигающую чем-то я не буду;) А только опишу особенности реализации С в применении к iar. Итак, сразу включаем в самое начало программы следующее:.
Без определения *1 не будут доступны битовые поля регистров. Почему так сделано мне самому не понятно:) В *2 идет как раз описание регистров. Без *3 не будет некоторых макроопределений. Задержки в iar сделаны через количество тактов, однако в 99% случаев гораздо удобней указывать время задержки в микро или миллисекундах.
Поэтому добавим следующие определения:. Теперь задержку можно сделать так:. Для размещения констант во флеш используется модификатор __flash:. Для переменных в eeprom соответственно модификатор __eeprom.
Как читать и писать такие переменные компилятор разберется сам, при этом для чтения не нужны извращения типа pgm_read_byte. Все переменные этих типов могут быть только глобальными и запись во флеш не поддерживается.
Т. команд типа SPM нет.
Как пример запись в eeprom константы из flash:. Прерывания объявляются следующим образом:. Где TIMER2_OVF_vect тип прерывания, имена прерываний можно посмотреть в файле описания конкретного процессора. Для mega16 — это C:Program Files (x86)IAR SystemsEmbedded Workbench 5. 4avrinciom16.
TIMER2_interrupt — просто имя прерывания, можно написать что угодно. В остальном тут такой же С как и в любой другой среде. Отлаживать программу можно в железе, через любые аппаратные отладчики.
JtagIce и Dragon самые известные и доступные из них. При этом показывается содержимое регистров, переменные, снимаются/устанавливаюся аппаратные флаги и срабатывают прерывания.
Причем в отличие от gcc + студия переменные показываются вне зависимости от ее типа и расположения. В общем отладка в железе в iar проста и приятна. Тип отладчика выбирается в свойствах проекта. Там же он и настраивается. У кого отладчиков нет можно использовать симулятор.
Тут уже не так радостно. IAR, в отличие от студии, не эмулирует работу процессора. Это означает, что таймеры в симуляторе не считают, флаг готовности аппаратного i2c не устанавливается и так далее. И установка флага нужного прерывания вручную не приведет к вызову этого прерывания. Но переменные все равно показываются правильно. После gcc это неимоверно доставляет. Итак, отладка в iar.
Для запуска отладчика нажимаем зеленый треугольник на правом панеле. Дополнительные окна открываются через меню View.
Переменные (окно 4) могут показываться в окнах Watch, Auto, Statics и Locals. В окне Watch отображаются только выбранные переменные, в Statics все статические, а в Locals только локальные переменные. В окне Auto будут только переменные недавно изменившие значение. В качестве переменных можно указывать названия регистров.
К примеру на переменную PORTB будет выводиться текущее состояние этого порта. При желании можно сделать вывод каждого окна отдельно или выбирать нужное закладкой внизу окна. Способ вывода меняется перетягиванием нужных окон. Окно Регистры (окно 3)отличается от переменных тем, что в нем выводится не только значение выбранного регистра, но и связанные с ним регистры.
Например для порта А также будет выведены DDRA и PINA. Так же значение каждого регистра можно развернуть для показа битовых полей. В окне дизасемблера (окно 2) и самой программы (окно 1) будет текущий выполняемый фрагмент кода. Если при этом выбрать окно ассемблера, то при при трассировке будет выполнятся каждая ассемблерная команда по очереди. Так же ставить точки останова можно в любом окне. Так можно отладить всю логику программы, кроме работы железа и прерываний.
И если с симуляцией железа сделать ничего нельзя, кроме как ставить нужные биты вручную, то вызвать прерывания автоматически все таки можно. Хоть и не удобно, но все же можно. Для этого выбираем Simulator->Interrups. В этом окне выбирается тип прерывания, через сколько времени оно начнет работать и интервалы срабатывания. После установки прерывания оно начнет регулярно срабатывать. До симулирования работы проца конечно далеко, но все же лучше чем вообще ничего.