Многих начинающих программистов WINAVR подкупает возможностью работать в связке с AVR Studio, которая имеет в своем составе программный отладчик. Если вы еще не в курсе, то IAR тоже позволяет это делать, только для этого нужно установить специальный формат выходного файла.
Выбираем конфигурацию Debug.
Задаем настройки проекта Project > Options пункт Linker вкладка Output.
Снимаем галочку Override default, если она установлена.
Выбираем радио-кнопку Other, а в выпадающем списке Output Format > ubrof 8(forced)

Кликаем Ок, компилируем проект.
Если все прошло без ошибок, ищите в папке проекта > Debug > Exe файл ring1.dbg
Запускаем AVR Studio.
Откроется Project Wizard. Если не открылся – запускаем его вручную Project > Project Wizard.
Кликаем Open и указываем путь к файлу ring1.dbg.
Студия предложит сохранить файл ring1_dbg.aps в папке проекта. Соглашаемся.
Затем откроется окно выбора отладочной платформы и микроконтроллера – выбираем AVR Simulator и ATMega8535
Жмем Finish.
Итак, проект открылся и уже запущен режим отладки.

Step Into
Toggle Disassembler Window
Run
Toggle Breakpoint
Чтобы убрать breakpoint, нужно поставить рядом с ним курсор и снова нажать F9. Все breakpoint`ы убираются нажатием на иконку Remove all Program Breakpoints.
Toggle Watch Windows
Добавить переменную в таблицу можно двумя способами. Кликнуть левой кнопкой мышки в первом столбце и в открывшеся поле ввести имя переменной. Или выделить нужную переменную в окне редактора кода, навести на нее курсор и, удерживая левую кнопку мышки, перетащить переменную в окно Watch.
Также в AVR Studio есть окна для наблюдения за содержимым памяти (Data, EEPROM, I/O, Program, Register). Открывается в меню View > Memory Window или с помощью иконки Toggle Memory Window.
Toggle Memory Window

Возьмем для эксперимента проект ring.rar. Он простой и в нем задействовано прерывание.
Открываем его в IARе.Выбираем конфигурацию Debug.
Задаем настройки проекта Project > Options пункт Linker вкладка Output.
Снимаем галочку Override default, если она установлена.
Выбираем радио-кнопку Other, а в выпадающем списке Output Format > ubrof 8(forced)

Если все прошло без ошибок, ищите в папке проекта > Debug > Exe файл ring1.dbg
Запускаем AVR Studio.
Откроется Project Wizard. Если не открылся – запускаем его вручную Project > Project Wizard.
Кликаем Open и указываем путь к файлу ring1.dbg.
Студия предложит сохранить файл ring1_dbg.aps в папке проекта. Соглашаемся.
Затем откроется окно выбора отладочной платформы и микроконтроллера – выбираем AVR Simulator и ATMega8535
Жмем Finish.
Итак, проект открылся и уже запущен режим отладки.

В центре экрана редактор кода. Желтая стрелка указывает на текущую выполняемую строчку программы. Сейчас она в начале функции main. С правой стороны – внутренности чипа – порты, таймеры, АЦП и т.п. Можно просматривать их значения, а также устанавливать по своему усмотрению. С левой стороны – вкладка Processor. Вторая вкладка в этом окне – Project. Она отображает структуру проекта.
Не буду вдаваться в подробности отладки в AVR Studio, остановлюсь только на нескольких моментах.
Пошаговое выполнение программы происходит при нажатии кнопки F11 (Step Into) . Можно выполнять программу на си, а можно на ассемблере. По умолчанию открыт сишный файл, ассемблерный открывается через меню View > Disassembler или с помощью иконки Toggle Disassembler Window.
Step Into Кнопка F5 (Run) запускает выполнение программы в непрерывном режиме. Это имеет смысл, если в программе расставлены breakpoint`ы (точки остановки). Например, мы хотим проверить выполнение кода в прерывании таймера. Как до него добраться? Ставим курсор в начало прерывания и нажимаем F9 (Toggle breakpoint). Слева от курсора появится красный кружок, это и есть breakpoint. Запускаем программу в непрерывном режиме – F5. Программа будет выполняться до тех пор, пока не произойдет прерывание таймера.
Run
Toggle BreakpointЧтобы убрать breakpoint, нужно поставить рядом с ним курсор и снова нажать F9. Все breakpoint`ы убираются нажатием на иконку Remove all Program Breakpoints.
Remove all Program Breakpoints
Можно запускать выполнение программы до курсора. Ставим курсор в нужное место и нажимаем Ctrl + F10 ( Run to Cursor).
Run to Cursor
Переход в начало программы происходит при нажатии Shift + F5 (Reset).
Reset
В процессе отладки часто требуется наблюдать, как меняются значения переменных или регистров. Для этих целей в отладчике AVR Studio есть окно Watch. Чтобы его открыть, выберете View > Watch или кликните по иконке Toggle Watch Windows. Окно Watch представляет собой таблицу из 4-ех колонок: Name, Value, Type, Location. Имя, значение, тип и расположение в памяти соответственно.
Toggle Watch Windows
Также в AVR Studio есть окна для наблюдения за содержимым памяти (Data, EEPROM, I/O, Program, Register). Открывается в меню View > Memory Window или с помощью иконки Toggle Memory Window.
Toggle Memory Window
Наблюдение за ОЗУ может дать информацию о степени использования стека. Здесь есть один момент. Компилятор IAR использует 2 стека – RSTACK и CSTACK.
RSTACK или return address stack – предназначен для сохранения адресов возврата при вызове функций, прерываний. Указателем стека адресов возврата является специальный регистр SP (Stack Pointer).
CSTACK или data stack - для сохранения авто переменных в функциях, параметров функций. Указателем стека данных является регистровая пара YH:YL. Значения регистров SP и Y отображаются в AVR Studio с левой стороны на вкладке Processor.
Размеры обоих стеков задаются в IARe - Options > General Options > System. И последнее. Если вы попытаетесь изменить код программы из AVR Studio, у вас ничего не получится. Код программы нужно менять в IARe. Вносим изменения, компилируем проект и переключаемся в студию. Она тут же предложит вам обновить открытые файлы.


[code] [/code]