Вывод значений переменных, массивов и структур при отладке debug в IAR
Отладка в IAR
Отлаживать программу можно в железе, через любые аппаратные отладчики. 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...
В этом окне выбирается тип прерывания, через сколько времени оно начнет работать и интервалы срабатывания. После установки прерывания оно начнет регулярно срабатывать. До симулирования работы проца конечно далеко, но все же лучше чем вообще ничего.
Обратная связь
Интересуют вопросы реализации алгоритмов, программирования, выбора электроники и прочая информация, постараюсь осветить в отдельных статьях
пишите мне на netdm@mail.ru
Добавить комментарий