AVR Studio. Ликбез


3 Июль 2008

Установка.

Сначала надо с сайта atmel.com скачать последнюю версию AVR Studio. Весит она что-то около 30 метров. Можно и старые релизы использовать, не преступно, но там может не оказаться новых микроконтроллеров. AVR Studio, как и многие буржуйские программы, крайне хреново понимает русские имена и длинные пути. Поэтому ставь ее по максимально простому пути, что то вроде C:\AVR\ А сами проекты тоже держи как можно ближе к корню, У меня, например, это D:\Work\AVR — никаких имен длинней 8 символов и, конечно же, никаких русских символов. Привет родимый DOS, как говорится.

Да, если планируешь (если не планируешь, то все равно скачай и поставь, не помешает) писать на Си, то рекомендую скачать GCC aka WinAVR и установить ее ДО студии, туда же, поближе к корню. Тогда студия подхватит ее в качестве своего плагина. Если поставить после, то тоже, может быть подхватит, но возможны проблемы.

Первый запуск и знакомство с оболочкой

При старте Студия сразу же кидается в тебя мастером создания нового проекта.

В центре будут уже созданные проекты, а нас интересует кнопка New Project. Жми ее и вводи параметры будущей разработки.

Выбирай тип языка, на котором будешь писать: Си или Ассемблер, а также имя будущего проекта. Также не помешает указать путь к папке с проектами. Студия умная и запомнит ее раз и навсегда и под каждый новый проект будет генерить новую папку. Так что скоро там будет полный гадюшник :))))) Дальше есть две кнопки Finish и Next. Тебе надо жать на Next. Нажмешь на финиш и получишь пустой проект, в котором даже процессор-то не определен. А вот если Next, то будет следующий диалог:

Сильно сомневаюсь, что у тебя первоначально сразу же будет AVR Dragon или какой-нибудь ICE 2, так что мы будем симулировать. Выбирай симулятор. Чем отличается AVR Simulator от AVR Simulator2 я так и не понял, работают одинаково. Выбрал? Вот теперь FINISH HIM! В смысле, жми Finish.

Во, появилось пустое окно проекта. Оглядим, что тут есть:

Слева — окно ресурсов МК. Тут ты будешь глядеть, что происходит с твоим контроллером. Какие где биты стоят, что на портах, что в счетных регистрах, что в регистрах конфигурации. В центре окно кода, справа же окно проекта — тут будут все файлы показаны. Внизу, под окном кода, отрыг сообщений компилятора. Там все ошибки и косяки отображаются при компиляции проги.

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

Подробно по пунктикам. Первый ряд.


Второй ряд:
Тут ничего не работает, т.к. нет подключенных девайсов (JTAG или STK500) и нас интересуют только две последние кнопки.
Первая из них - это компиляция проекта, вторая - компиляция и запуск симуляции.

Теперь, если ты забьешь в проект простейший код, например,

  .include "m8def.inc"  ; Используем мега8
M1:
  NOP     ; Ничего не делаем (команда NOP просто пропускает один такт и занимает одно слово в памяти)
  NOP     ; Опять ничего не делаем
  NOP     ; И снова ничего не делаем
  RJMP M1 ; Возвращаемся к метке М1 и снова ничего не делаем

Куда уж проще :) То сможешь скомпилировать проект и запустить процесс отладки.

При запуске симулятора повылазит куча разных новых окошек, о которых я тебе сейчас расскажу. Гляди на скриншот:

I/O View

Окно переферии, то, что справа. Обрати внимание на заголовок окна I/O View — там есть строка поиска и ряд кнопочек. Потыкай их, чтобы получить наиболее удобное представление. Я обычно ставлю Tree View. Каждый регистр можно развернуть. Каждый бит подписан и во всплывающей подсказке написано его назначение. Также настоятельно рекомендую прошерстить контекстное меню в этом блоке и выставить там галку Show Bit numbers — удобно. Черный квадратик — бит есть. Белый — бита нет. Там же указано значение в байте. В процессе отладки каждый бит можно вручную принудительно выставить или сбросить. Сэмулировав, например, нажатие кнопки.

Processor

Слева есть окно Processor, в нем указана вся подноготная ядра в текущий момент.

Memory

Окно памяти. Можно в списке выбирать любое адресное пространство. Хочешь флеш, хочешь епром, или ОЗУ.

Watch

Это Watch лист. Можно на любой адрес, переменную или любой регистр навесить гляделку и там всегда будет отображаться его содержимое. Удобно при отладке, чтобы не шерстить по коду. Также содержимое регистров/переменных подсвечивается в подсказке при наведении мыши.

Отладка в AVR Studio

Код ты написал, он у тебя даже скомпилировался. Но от радости прыгать не получается — не работает как задумано. Чтож, бывает. Начинаем избавлять код от лажи — отлаживать.
Сначала подготовь плацдарм и выстави требуемую частоту процессора.

Как выставить частоту процессора в AVR Studio:
Загадка века, между прочим. Сходу фиг найдешь. Короче, запускай процесс симуляции. Только в этом случае появится нужный пункт меню. А потом лезь в меню Debug -> AVR Simulations Options. Ну не козлы, а? В такие гребеня прятать столь важный параметр. Я почти два месяца его в свое время искал. Там же можно выставить адрес бутлоадера (он зависит от Fuse Bits в реальном МК).

Итак, симуляция запущена, а желтая стрелка бодро указывает на первую команду. Потыкай на клавишу F11, погляди как процессор шагает. Если все нормально, то переходи на то место, где у тебя предпологаемый затык. Например, не выставляется бит в порт. Можно поставить в это место курсор и нажать Run to Cursor, это если по быстрому. Но лучше использовать брякпоинт.

BreakPoint

Это точка останова. Т.е. если какое-то условие совпадет, то процессор встанет как вкопанный, пока ты не примешь решение, что же делать дальше. Мощнейшее средство отладки. Самый простой случай это установка Breakpoint — кнопкой F9, она же его и убирает. Через контекстное меню брейпоинт можно временно дезактивировать. Все, если теперь ты нажмешь на F5, то проц пойдет молотить код подряд, пока не дойдет до брейкпоинта. Где встанет как вкопаный, перейдя в пошаговый режим.

Техническое отступление, при желании можно его пропустить
Не получилось? Прождал полтора часа, а бряк так и не наступил? Ну значит где-то у тебя косяк, зациклило прогу. Жми паузу и смотри, где переклинило процессор. Можешь пошагово потрейсить и посмотреть, в каком именно месте оно крутится. А дальше уже думать. Отработка больших циклов может быть очень длительной. Например, задержка длительностью в двадцать секунд, эмулируется в Студии порядка пяти минут!!! (на моем древнем Athlon 950) Так что если у тебя где-то тупит, то не помешает глянуть на показания StopWatch — может на самом деле все еще нормально, просто подождать надо. Чтобы не тупить на таких циклах, я их на время отладки закомменчиваю или меняю предделитель таймера с 1024 на 1. На логику же это не влияет, так что можно проскочить их по быстрому.

Бряки бывают разные. Добавляются Брейкпоинты из меню Debug -> New Breakpoint их там два вида. Programm Breakpoint — это тупо, точки останова на конкретном месте. Их проще расставлять не отсюда, а прям в коде на нужной строке. А вот Data Breakpoint это, уже куда интересней. Погляди на выпадающий список — есть где развернуться. Тут тебе и совпадение битов, и равенство нужному числу, и просто обращение к адресу/регистру/памяти. Причем можно указывать сразу битовую маску. А в разделе Location выбрать любой байт памяти или регистр конфигурации. Мало того, в настройках брейка можно выбрать, после скольких событий должен сработать этот бряк. Например, ты поставил брейк на начало цикла, нужно тебе поглядеть, что происходит на какой-нибудь 140 итерации. Не будешь же ты тыкать, пока оно там все 140 раз не прокрутится. Ставим в свойствах бряка число хитов, которые он должен пропустить — 140, и на 140 итерации он тормознет программу. Удобно, черт возьми!
Все брейкпоинты видны в окне Breakpoint and tracepoint, которое возникает внизу, там же, где и сообщения об ошибках, в виде закладки. Оттуда им можно менять свойства, там же можно вывести отображение числа хитов и другие свойства бряка.

Работа с портами, эмуляция кнопок и прочего внешнего оборудования.

Есть в отладке AVR Studio одно небольшое западло, точнее, особенность. Когда ты устанавливаешь порт на вход, делая подтяжку на резистор:
DDR= 0
PORT=1
то вывод виртуального МК остается равен нулю!!! Таким образом, все кнопки в отладчике AVR Studio по дефолту оказываются нажатыми! Нужно вручную выставить значение PIN, протыкав соответствующие галочки. Неудобно, но так.
А еще можно заказать вывод лога из порта или заливку туда данных извне! Вот это ваще мега фича. Во время отладки, в меню Debug->Simulation Options, в разделе Stimuli&Loggin можно выбрать, на какой порт повесить либо логгер, либо же загнать дамп нужных циферок. Входные данные задаются в файле *.sti в формате такого вида: [номер таката]:[значение]. Примерно так:

000000006:01
000000010:02
000000014:03
000000018:04
000000022:05
000000026:06
000000030:07

Можно задавать его вручную, можно написать программу в той же студии, которая тебе его сгенерит :)))) А можно применить одну зашибенную программку stimuligenerator_net20, которую написал широко известный в узких кругах товарищь ARV, обитающий на сайте arv.radioliga.com. Кстати, рекомендую к посещению, достойный ресурс.
Программка проста как мычание — выставляешь нужные биты по времени, не забыв указать частоту принимающего МК (чтобы такты выставило правильно). Опа, и никаких забот :) Для работы программка правда требует .NET окружение, поэтому вначале придется скачать 30МБ .Net Frame Work, если ты его себе еще не поставил.

Выходящий лог можно наблюдать в Студии в окне Message (вкладка рядом с сообщениями об ошибках компиляции) и потом поглядеть в файле. Формат там такой же (номер такта:значение порта). Такты идут по порядку при старте процессора, с нуля. Его же можно также открыть stimuligenerator-ом. Короче, программа Must Have.

Работа с прерываниями

Ну тут все просто, хочешь прерывание — ткни вручную бит ее флага, мол вот оно, и прерывание начнется. Особенно это актуально для всяких внешних источников. Вроде UART или INT. После ручного вызова, например, RX прерывания, не грех будет взять и вбить ручками в нужный регистр якобы принятое значение. Опа, и словно так и было :)))))

Ладно, на сегодня хватит. Потом еще парочку телег по отладке в AVR Studio толкну. Мне, например, уже давно никакие эмуляторы вроде Proteus не нужны. На все хватает родимой студии, да UART вывода. Ну еще парочка примочек, но о них в следующий раз.


Архитектура Содержание Макроассемблер


ист-к: http://easyelectronics.ru/avr-studio-likbez.html