Быстрый старт. Про создание проектов для ARM уже писали в учебном курсе имени этого же контроллера, я же напишу про создание проекта для AVR, особенностей работы и отладки в нем. Так же не трудно найти вылеченную. Какую выбрать каждый решит для себя сам, скажу только что для нормальной работы вылеченной нужно запрещать программе выход в интернет.
Последняя на данный момент версия 5. Ее я и буду использовать. Настройка среды. В Messages в пункте Show build messages выбрать тип All. После этого при компиляции будет выводиться информация о размере программы и данных. Для этого жмем Tools- > Configure Tools..
Строку Initial Directory можно оставить пустой или указать в ней путь к выходным файлам текущего проекта. Тогда после запуска сразу будет выбираться папка с прошивкой. В принципе для этого предназначена галка Redirect to Output Window, с которой путь должен автоматом подставляться для текущего проекта. Но у меня она почему- то не заработала. Создание проекта. Запускаем IAR Embedded Workbench и видим главное окно программы: Выбираем в меню — Project- > Create New Project..
В появившемся окне можно выбрать язык (ASM, C, C++) и тип проекта. Совместимость с AVR Studio нам не к чему, поэтому создадим приложение на обычном С. Программа сразу предложит сохранить полученный проект. Сохраняем и получаем на выходе следующий сгенерированный код: int main( void ). Смету На Металлическую Дверь. Тип памяти влияет на размер адреса переменных в памяти данных.
У модели tiny — 1 байт на адрес, у small — 2 байта. Далее переходим к вкладке С/С++ Compiler: В принципе по началу тут можно ничего и не трогать, но про самые основные вкладки сказать стоит. В Plain 'char' is выбирается тип переменной char по умолчанию — со знаком или нет. В Optimization как нетрудно догадаться выбирается тип и уровень оптимизации. И на вкладке List можно включить опцию генерации ассемблерного листинга. И последняя, весьма важная вкладка — Linker. По умолчанию линкер создает свой, весьма специфический, файл с расширением *.
Запускаем IAR AVR. Откроется окно Embedded Workbench Startup, можно создать проект ипользуя его, но мы пойдем другим путем, .
Полезная информация, которая может помочь в среде программирования IAR Embedded Workbench for AVR (язык C). Программирование на Си под AVR Первая статья. Знакомство с компилятором IAR AVR. IAR — это один из лучших компиляторов С/С++ для множества микроконтроллеров, начиная от 8051 и заканчивая продвинутыми .
Со всей отладочной информацией и прочей кучей мусора. Прошивать его в контроллер напрямую нельзя, поэтому вывод необходимо перенастроить. Тут есть 2 пути: 1. Переназначить типы выходных файлов во что- то стандартное. Но тут есть свои тонкости.
Например, если на вкладке Output сделать выходной файл intel- standart, то потеряется возможность символьной отладки. Тогда будет и нормальная отладка в симуляторе и готовый выходной файл для прошивки. Но если в программе используются переменные из eeprom, то получим ошибку линкера. Поэтому всегда лучше использовать второй путь. Если в программе используется eeprom, то линкеру надо сообщить что ему необходимо создать 2 файла.
Для этого сразу переходим к последней вкладке Extra Options, разрешаем использовать их и в поле вводим. Ointel- standard,(CODE)=. Ointel- standard,(XDATA)=. В результате получим на выходе 3 файла: *.
На этом настройку проекта можно считать законченной и переходить к написанию программы. Написание Hello World. На самом деле писать программу мигающую чем- то я не буду; ) А только опишу особенности реализации С в применении к iar. Итак, сразу включаем в самое начало программы следующее: #define ENABLE. Почему так сделано мне самому не понятно: ) В *2 идет как раз описание регистров.
Без *3 не будет некоторых макроопределений. Поэтому добавим следующие определения: #define F. Все переменные этих типов могут быть только глобальными и запись во флеш не поддерживается. Как пример запись в eeprom константы из flash: unsigned char . Для mega. 16 — это C: \\Program Files (x. IAR Systems\\Embedded Workbench 5. TIMER2. Jtag. Ice и Dragon самые известные и доступные из них.
При этом показывается содержимое регистров, переменные, снимаются/устанавливаюся аппаратные флаги и срабатывают прерывания. Причем в отличие от gcc + студия переменные показываются вне зависимости от ее типа и расположения.
В общем отладка в железе в iar проста и приятна. Тип отладчика выбирается в свойствах проекта. Там же он и настраивается. У кого отладчиков нет можно использовать симулятор. Тут уже не так радостно. IAR, в отличие от студии, не эмулирует работу процессора.
Это означает, что таймеры в симуляторе не считают, флаг готовности аппаратного i. И установка флага нужного прерывания вручную не приведет к вызову этого прерывания. Но переменные все равно показываются правильно. После gcc это неимоверно доставляет. Итак, отладка в iar. Для запуска отладчика нажимаем зеленый треугольник на правом панеле. Дополнительные окна открываются через меню View.
Переменные (окно 4) могут показываться в окнах Watch, Auto, Statics и Locals. В окне Watch отображаются только выбранные переменные, в Statics все статические, а в Locals только локальные переменные.
В окне Auto будут только переменные недавно изменившие значение. В качестве переменных можно указывать названия регистров. К примеру на переменную PORTB будет выводиться текущее состояние этого порта. При желании можно сделать вывод каждого окна отдельно или выбирать нужное закладкой внизу окна. Способ вывода меняется перетягиванием нужных окон.
Окно Регистры (окно 3)отличается от переменных тем, что в нем выводится не только значение выбранного регистра, но и связанные с ним регистры. Например для порта А также будет выведены DDRA и PINA. Так же значение каждого регистра можно развернуть для показа битовых полей.
В окне дизасемблера (окно 2) и самой программы (окно 1) будет текущий выполняемый фрагмент кода. Если при этом выбрать окно ассемблера, то при при трассировке будет выполнятся каждая ассемблерная команда по очереди. Так же ставить точки останова можно в любом окне. Так можно отладить всю логику программы, кроме работы железа и прерываний. И если с симуляцией железа сделать ничего нельзя, кроме как ставить нужные биты вручную, то вызвать прерывания автоматически все таки можно. Хоть и не удобно, но все же можно. Для этого выбираем Simulator- > Interrups..
В этом окне выбирается тип прерывания, через сколько времени оно начнет работать и интервалы срабатывания. После установки прерывания оно начнет регулярно срабатывать. До симулирования работы проца конечно далеко, но все же лучше чем вообще ничего.