Книга по работе с WinAVR и AVR Studio / AVR_07-2010
.pdf
СПРАВОЧНЫЙ МАТЕРИАЛ
|
Роман Абраш |
Книга по работе |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
||
|
г. Новочеркасск |
с WinAVR и AVR Studio |
|
||||||||
|
E-mail: arv@radioliga.com |
|
|||||||||
|
|
|
|
В этой панели отображаются как неко- |
|
Окно-панель наблюдения за перемен- |
|||||
|
Продолжение. |
|
|
|
|||||||
|
|
торые недоступные для принудительного |
|
ными Watch: |
|
||||||
|
Начало в №1-6/2010 |
|
|
|
|||||||
|
|
изменения значения, так и доступные. |
|
|
|
|
|
|
|||
|
|
|
|
Program Counter – программный счет- |
|
|
|
|
|
|
|
|
Наблюдение за ресурсами |
чик, показывает значение PC, т.е. в сущнос- |
|
|
|
|
|
|
|||
|
проекта |
ти адрес очередной исполняемой команды. |
|
|
|
|
|
|
|||
|
Для наблюдения за содержимым всех |
|
Stack Pointer – указатель стека, показы- |
|
|
|
|
|
|
||
|
ресурсов микроконтроллера и переменных |
вает адрес ОЗУ, хранящийся в регистре SP. |
|
|
|
|
|
|
|||
|
в программе пользователя во время ее от- |
|
X pointer, Y pointer и Z pointer – пока- |
|
|
|
|
|
|
||
|
ладки AVR Studio предоставляет богатый |
зывает значения указателей X, Y и Z. |
|
Это окно содержит 4 закладки, в каж- |
|||||||
|
набор средств. Прежде всего, это «Окно |
|
Рассмотренные три параметра недо- |
|
дой из которых можно наблюдать и при не- |
||||||
|
периферии», предоставляющее удобный |
ступны для принудительного изменения в |
|
обходимости модифицировать содержимое |
|||||||
|
интерфейс наблюдения и изменения состо- |
ходе отладки. |
|
любых переменных (в том числе регистров |
|||||||
|
яния всех регистров управления встроенны- |
|
Cycle Counter – счетчик машинных цик- |
|
микроконтроллера) во время отладки. Ин- |
||||||
|
ми периферийными устройствами микро- |
лов, показывает число тактов, потраченных |
|
формация представлена в виде таблицы из |
|||||||
|
контроллера. Во время отладки состояние |
на исполнение всех команд с момента стар- |
|
4-х столбцов: |
|
||||||
|
отдельных битов изображается закрашен- |
та программы. Этот счетчик может быть |
|
Name – имя переменной. Можно ввес- |
|||||||
|
ными в черный цвет квадратиками; щелк- |
сброшен в любое время 28. |
|
ти имя переменной вручную, выполнив |
|||||||
|
нув на любом из них, программист может |
|
Frequency – тактовая частота, соответ- |
|
двойной щелчок в первой свободной стро- |
||||||
|
изменить состояние бита на противополож- |
ствует значению, заданному в настройках |
|
ке. Двойной щелчок на имени уже имею- |
|||||||
|
ное. Это бывает необходимо в следующих |
эмулятора (см. предыдущую главу). |
|
щемся в окне позволяет изменить его, т.е. |
|||||||
|
случаях: |
|
Stop Watch – время остановки. Это зна- |
|
выбрать другую переменную для наблюде- |
||||||
|
- обнаружена ошибка в программе, зак- |
чение показывает время, прошедшее с мо- |
|
ния. |
|
|
|
|
|||
|
лючающаяся в «инверсном» анализе како- |
мента начала исполнения программы (т.е. |
|
Value – значение переменной. Показы- |
|||||||
|
го-либо бита (т.е. надо проверять на равен- |
с момента старта отладки) до момента ее |
|
вается числовое и, если возможно, символь- |
|||||||
|
ство 1, а в программе ошибочно проверя- |
приостановки. Этот «секундомер» может |
|
ное представление. Выполнив двойной щел- |
|||||||
|
ется на 0 и т.п.). Конечно, можно остановить |
быть сброшен пользователем в любой мо- |
|
чок в этом столбце, можно принудительно |
|||||||
|
процесс отладки и, исправив ошибку, пере- |
мент, что позволяет засекать время испол- |
|
изменить значение переменной, введя лю- |
|||||||
|
компилировать программу, однако часто |
нения отдельных участков программы. |
|
бую допустимую в Си константу. |
|
||||||
|
удобнее принудительно изменить бит в ре- |
|
SREG – содержимое регистра статуса |
|
Type – тип переменной. |
|
|||||
|
гистре «наоборот», чтобы «обмануть» не- |
ядра микроконтроллера, показывает состо- |
|
Location – адрес начала области памя- |
|||||||
|
верную программу, заставив ее правильно |
яние всех битов этого регистра, которые |
|
ти, выделенной для хранения переменной. |
|||||||
|
отреагировать на ситуацию, чтобы продол- |
доступны для изменения пользователем. |
|
В квадратных скобках указывается тип па- |
|||||||
|
жить отладку остальных участков кода; |
|
Далее следует группа регистрового |
|
мяти (встроенное ОЗУ или внешнее). |
|
|||||
|
- AVR Studio не поддерживает коррект- |
файла микроконтроллера – Registers, в |
|
Кроме ручного ввода имени перемен- |
|||||||
|
ную эмуляцию периферийного устройства |
которой показано содержимое всех 32 ре- |
|
ной, в окно Watch можно перетащить и бро- |
|||||||
|
контроллера. Например, невозможна эму- |
гистров. Эти значения так же доступны для |
|
сить идентифика- |
|
||||||
|
ляция АЦП – значение в регистрах резуль- |
модификации в любое время. |
|
тор переменной |
|
||||||
|
тата AVR Studio никогда самостоятельно не |
|
Для панели Processor доступно всплы- |
|
прямо из текста |
|
|||||
|
изменяет, и для того, чтобы проимитировать |
вающее меню: |
|
программы, т.е. |
|
||||||
|
факт реального измерения, программист |
|
Hexadecimal |
|
выделить пере- |
|
|||||
|
должен самостоятельно ввести значения в |
Display – если |
|
менную, «схва- |
|
||||||
|
соответствующие регистры; |
отмечено, то все |
|
тить» ее и перене- |
|
||||||
|
- необходимо проимитировать поступ- |
или только выб- |
|
сти в это окно. |
|
||||||
|
ление на порт микроконтроллера сигнала |
ранное мышкой |
|
Есть и третий спо- |
|
||||||
|
извне (от прочих элементов схемы). В этом |
значение будет |
|
соб – установив |
|
||||||
|
случае нужно изменить значение соответ- |
отображаться в |
|
курсор на интере- |
|
||||||
|
ствующего регистра PINx вручную. Кроме |
шестнадцатеричном формате, в противном |
|
сующую перемен- |
|
||||||
|
ручного способа имеется и «полуавтомати- |
случае используется десятичный формат. |
|
ную в тексте про- |
|
||||||
|
ческий», так называемое «стимулирование |
|
Reset Stopwatch – сброс времени ос- |
|
граммы, щелк- |
|
|||||
|
порта», которое рассматривается в следу- |
тановки (сброс «секундомера»). |
|
нуть правой кноп- |
|
||||||
|
ющей главе более подробно. |
|
Reset Cycle Counter – сброс счетчика |
|
кой мыши и в по- |
|
|||||
|
Кроме окна периферии имеется и еще |
машинных тактов. |
|
явившемся меню |
|
||||||
|
ряд окон и панелей, управляемых при помо- |
|
Show Stopwatch in milliseconds – вре- |
|
(см. рисунок) выб- |
|
|||||
|
щи меню «View». Рассмотрим их подробно. |
мя остановки отображать в миллисекундах |
|
рать команду Add |
|
||||||
|
Панель состояния процессора – |
(по умолчанию счет в микросекундах). |
|
Watch. |
|
|
|
|
|||
|
Processor. По умолчанию (если расположе- |
|
Font – изменить шрифт, используемый |
|
Наконец, аналогичный результат дости- |
||||||
|
ние панелей |
для вывода содержимого панели. |
|
гается и при нажатии на кнопку |
на |
||||||
|
не было изме- |
|
Default Font – установить для панели |
|
панели кнопок. |
|
|||||
|
нено) в режи- |
шрифт по умолчанию. |
|
Для |
окна |
|
|||||
|
ме отладки |
|
Help – вызов справки (на английском) о |
|
Watch |
имеется |
|
||||
|
автоматичес- |
панели. |
|
всплывающее |
|
||||||
|
ки активиру- |
|
|
|
|
меню: |
|
|
|
|
|
|
ется в облас- |
|
28 Здесь и далее под «любым временем» подразуме- |
|
D i s p l a y |
|
|||||
|
ти, где нахо- |
вается любой момент остановленного исполнения програм- |
|
selected Value as |
|
||||||
|
дится и окно |
мы. Во время автоматического или автоматического по- |
|
Hex – |
отобра- |
|
|||||
|
шагового исполнения все средства изменения состояния |
|
|
||||||||
|
проекта: |
|
жать выбранное |
|
|||||||
|
регистров и портов недоступны. |
|
|
||||||||
5 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Радиолюбитель – 07/2010 |
||
|
|
|
|
|
|
|
|
|
|
||
СПРАВОЧНЫЙ МАТЕРИАЛ
значение (необходимо предварительно вы- |
При помощи команд всплывающего |
которые определяют границы выбранной |
|||||
делить строку в таблице) в виде шестнад- |
меню можно гибко управлять как отобра- |
области). В поле Hex File нужно указать имя |
|||||
цатеричного числа. |
жением, так и содержимым наблюдаемой |
файла, с которым будет осуществлена ра- |
|||||
|
Display all Values as Hex – все значе- |
области памяти: |
бота. Кнопка Load from File позволяет заг- |
||||
ния показывать в шестнадцатеричном фор- |
Hexadecimal |
рузить из указанного файла содержимое в |
|||||
мате. |
и Decimal позво- |
выбранную область памяти, а кнопка Save |
|||||
|
Display Array Index as Hex – индексы |
ляют переключить |
to File выполняет обратную операцию – со- |
||||
массивов показывать в шестнадцатеричном |
формат вывода |
храняет указанную область в заданный |
|||||
формате. |
содержимого па- |
файл. Формат файла – Intel HEX. Таким об- |
|||||
|
Add Item – добавить переменную |
мяти. |
|
разом, реализуется достаточно удобный |
|||
|
Remove selected Item – удалить из окна |
1 Byte или 2 |
механизм работы с «загружаемыми» дан- |
||||
выделенную строку (переменную) |
Byte переключа- |
ными. |
|
||||
|
Remove all items – удалить из заклад- |
ют разрядность |
Вернемся к окнам наблюдения: очеред- |
||||
ки все переменные |
данных |
(как и |
ное из них – это окно просмотра регистро- |
||||
|
Font и Default font – изменение шриф- |
кнопка 8/16). |
вого файла Register. |
||||
та для окна, как уже было сказано ранее. |
Byte address переключает режим вы- |
Оно дублирует |
|||||
|
Help on Watch View – вызов справки |
числения адреса – побайтно (если отмече- |
содержимое регист- |
||||
об окне. |
но) или по 16-битным словам. |
ров в |
панели |
||||
|
К сожалению, просмотр массивов в |
Add Data Breakpoint – команда установ- |
Processor, а по |
||||
окне Watch на протяжении многих версий |
ки точки остановки по изменению содержи- |
функциональности |
|||||
AVR Studio сопровождается одним неудоб- |
мого указанной ячейки памяти. |
соответствует толь- |
|||||
ством: содержимое массива не обновля- |
Show tooltip – включает или отключает |
ко что рассмотрен- |
|||||
ется в момент остановки программы (на |
всплывающие подсказки. |
ным окнам с той |
|||||
точке останова или принудительно), поэто- |
Вы можете изменить произвольно выб- |
лишь разницей, что |
|||||
му приходится «свернуть» и затем «раз- |
ранную ячейку и посмотреть, как это ска- |
позволяет отображать информацию с боль- |
|||||
вернуть « массив, чтобы увидеть его акту- |
жется на работе вашей программы. Очень |
шим разнообразием форматов, указывае- |
|||||
альное содержимое. Для сворачивания и |
удобно при помощи этого окна определять |
мых через всплывающее меню: |
|||||
разворачивания массивов в соответству- |
глубину стека, необходимую для работы |
В дополнению к |
|||||
ющей строке окна будет находиться кно- |
программы: запускаем программу на испол- |
шестнадцатерично- |
|||||
почка с «плюсиком» или «минусом» соот- |
нение, ждем достаточное время для того, |
му и десятичному |
|||||
ветственно. |
чтобы все ветви алгоритма отработали, а |
форматам, здесь |
|||||
|
Окно просмотра содержимого памяти |
затем останавливаем программу и откры- |
имеется |
возмож- |
|||
|
ваем окно просмотра ОЗУ. Будет хорошо |
ность указать сим- |
|||||
Memory 29: |
|||||||
|
|
|
видно, что в начале области памяти и в кон- |
вольный (Ascii) или двоичный (Binary). |
|||
|
|
|
це ячейки содержат какие-то значения – в |
Последнее окно, нередко необходимое |
|||
|
|
|
начале область переменных, а в конце об- |
для отладки, это окно дизассемблера |
|||
|
|
|
ласть, использованная стеком. Если между |
(Disassembler). Это окно располагается |
|||
|
|
|
этими областями имеется достаточное ко- |
обычно в основной области, т.е. там же, где |
|||
|
|
|
личество пустых ячеек (содержат значение |
и исходный текст. В нем выводится дизас- |
|||
|
|
|
0xFF) – все нормально, стек не затирает |
семблированный код программы, т.е. вос- |
|||
|
|
|
область переменных. Если между этими об- |
становленный до команд ассемблера. При |
|||
|
|
|
ластями нет пустоты или всего две-три ячей- |
этом операторы Си так же показаны (что |
|||
|
|
|
ки не заняты – это очень тревожный при- |
позволяет увидеть, какими ассемблерными |
|||
|
|
|
знак –скорее всего такая программа в ре- |
командами реализован тот или иной опе- |
|||
|
|
|
альности работать не будет из-за перепол- |
ратор Си): |
|
||
|
Если окно Watch позволяет наблюдать |
нения стека. |
|
|
|||
|
В комплексе с |
|
|
||||
и модифицировать значения переменных, |
|
|
|||||
окном |
Memory |
|
|
||||
то данное окно позволяет аналогично опе- |
|
|
|||||
удобно использо- |
|
|
|||||
рировать содержимым любых ячеек памя- |
|
|
|||||
вать другую воз- |
|
|
|||||
ти безотносительно к их распределению по |
|
|
|||||
можность – заг- |
|
|
|||||
переменным. |
|
|
|||||
рузку или сохране- |
|
|
|||||
|
В верхней части окна имеется ряд ор- |
|
|
||||
|
ние содержимого |
|
|
||||
ганов управления: |
|
|
|||||
области памяти из/ |
|
|
|||||
|
· Список типов наблюдаемой памяти: |
|
|
||||
|
в файла, реализу- |
|
|
||||
Data (ОЗУ данных), EEPROM, I/O (область |
|
|
|||||
емую командой Up/Download Memory из |
Содержимое окна дизассемблера напо- |
||||||
портов), Program (Flash память программ) |
|||||||
меню «Debug». В этом случае появляется |
минает содержимое файла-листинга, за ис- |
||||||
и Register (область адресов регистрового |
|||||||
окно следующего вида: |
ключением того, что формируется не ком- |
||||||
файла). |
|||||||
|
|
пилятором, а AVR Studio. |
|||||
|
· Кнопка 8/16, позволяющая изменить |
|
|
||||
|
|
|
|
|
|||
разрядность отображаемых данных – 8 или |
|
|
Имитация входных сигналов |
||||
16 бит. |
|
|
|||||
|
|
и наблюдение выходных |
|||||
|
· Кнопка abc, включающая или отклю- |
|
|
||||
|
|
|
Микроконтроллер, не смотря на всю его |
||||
чающая показ символьного представления |
|
|
|||||
|
|
многофункциональность, так или иначе вза- |
|||||
содержимого. |
|
|
|||||
|
|
имодействует с остальными элементами |
|||||
|
· Поле Address, задающее адрес пер- |
|
|
||||
|
|
|
схемы конкретного устройства, т.е. должен |
||||
вой отображаемой ячейки в окне. |
|
|
|||||
Точно так же вы можете указать тип |
реагировать на входные сигналы, форми- |
||||||
|
Если на очередном шаге отладки содер- |
||||||
|
памяти – список Memory Type, задать ад- |
руя выходные. Процесс отладки часто тре- |
|||||
жимое ячейки памяти изменилось – это |
|||||||
рес первой обрабатываемой ячейки Start |
бует именно контроля того, как программа |
||||||
выделяется красным цветом. |
|||||||
Address, количество обрабатываемых яче- |
отреагирует на поступающие сигналы. |
||||||
|
|
|
|||||
|
|
|
ек Byte Count (при этом ориентируйтесь на |
Если входных сигналов немного и алгоритм |
|||
|
29 Как было упомянуто ранее, таких окон может быть |
||||||
до трех. |
подсказку выше – значения Start и Size, |
их поступления достаточно прост, то их |
|||||
|
|
|
5 3 |
Радиолюбитель – 07/2010 |
|
|
|
|
|
|
СПРАВОЧНЫЙ МАТЕРИАЛ
вполне можно проимитировать, устанавли- |
Если выбрано протоколирование пор- |
интерфейсов накладывает ограничения на |
вая нужные значения в нужные моменты |
та, то файл можно и не задавать, если ак- |
применимость средств – многие микрокон- |
времени непосредственно в соответствую- |
тивировать опцию To screen. В этом слу- |
троллеры принципиально не могут работать |
щих битах регистров PINx, как было сказа- |
чае по мере смены уровней на выбранном |
с этими средствами. |
но ранее. Но этот способ сильно усложня- |
порту в окне Message будут выводиться со- |
Имеются средства, которые облегчают |
ется, если число входных сигналов растет, |
ответствующие сообщения такого вида: |
процесс отладки, не заменяя эмуляцию, но |
и становится почти невозможным, если ча- |
|
дополняя ее – однако, это в сущности лишь |
стота их поступления высока. |
|
макетные платы с готовым интерфейсом |
Решение этой проблемы заключается |
|
«визуализации» данных – либо в виде раз- |
в использовании так называемой «стиму- |
|
личных дисплеев, либо в виде возможнос- |
ляции» портов микроконтроллера, т.е. ими- |
|
ти вывода информации из микроконтрол- |
тации поступления на них внешних сигна- |
|
лера в компьютер и отображения ее в окне |
лов. Реализуется это при помощи заранее |
|
терминальной программы. |
подготовленного текстового файла с рас- |
|
Все фирменные средства отладки (и, в |
ширением «sti», в котором последователь- |
Вывод этих сообщений не зависит от |
том числе, программирования) микроконт- |
но перечислены условные моменты (в ма- |
того, ведется ли запись протокола в файл |
роллеров приведены в справочном файле, |
шинных тактах работы микроконтроллера), |
или нет. |
открываемом по команде меню «Help» AVR |
когда состояние сигналов на порте меняет- |
Создание файлов стимуляции – доволь- |
Tools User Guide. В этом же файле приве- |
ся, и, разумеется, сами эти значения сигна- |
но-таки утомительная процедура, особенно |
дены подробные инструкции по их исполь- |
лов. То есть файл стимуляции имеет при- |
для длительных и сложных последователь- |
зованию. В рамках данной статьи рассмот- |
мерно следующее содержимое: |
ностей. Облегчить ее можно, если исполь- |
реть все средства достаточно подробно не- |
На рисунке по- |
зовать дополнительные утилиты сторонних |
возможно, поэтому ограничимся лишь их |
казано, что в на- |
разработчиков – см. главу «Дополнитель- |
кратким перечнем с указанием основных |
чальный момент все |
ные средства». |
особенностей. |
сигналы, подавае- |
|
ICE50 и ICE40 – эмуляторы-отладчики, |
мые на порт, имеют |
СРЕДСТВА ПОДДЕРЖКИ |
поддерживают почти все микроконтролле- |
низкий логический |
АППАРАТНОЙ ОТЛАДКИ |
ры, обеспечивают полный функционал от- |
уровень (00). В момент наступления 9-го ма- |
Под аппаратной отладкой понимаются |
ладки, включая все виды точек останова, |
шинного такта состояние сигналов меняет- |
средства, подключаемые к компьютеру че- |
поддержку аналоговой периферии, сторо- |
ся на 0xAB, а к 14-ому такту на 0xAC и т.д. |
рез один из имеющихся интерфейсов, и |
жевого таймера, режимов «сна» микрокон- |
Количество строк в файле ограничено зна- |
обеспечивающих исполнение программы в |
троллера и т.п. Отличаются комплектностью |
чением 999999999. |
реальном микроконтроллере, но под конт- |
и количеством поддерживаемых микрокон- |
Для стимуляции используется отдель- |
ролем среды AVR Studio. |
троллеров. Подключаются вместо реально- |
ный режим отладки, настраиваемый груп- |
Это позволяет полностью исключить |
го микроконтроллера в схему пользовате- |
пой параметров Stimuli and logging ранее |
несоответствия программной эмуляции мик- |
ля и имитируют его работу. |
рассматриваемого окна настроек эмулято- |
роконтроллера. Яркий пример – рассмот- |
JTAGICE – эмулятор-отладчик, поддер- |
ра. |
ренный способ стимуляции портов. Очевид- |
живающий только микроконтроллеры со |
|
но, что такая стимуляция осуществляется |
встроенным интерфейсом JTAG. Дополни- |
|
строго синхронно с работой микроконтрол- |
тельно обеспечивает возможность про- |
|
лера, т.к. моменты изменения уровней сиг- |
граммирования микроконтроллеров. В от- |
|
налов привязаны к числу машинных тактов. |
личие от ICE50, не эмулирует работу мик- |
|
В реальных схемах моменты поступления |
роконтроллера, а подключается к имеюще- |
|
внешних сигналов никак не связаны с ра- |
муся микроконтроллеру на плате пользо- |
|
ботой микроконтроллера, и с точки зрения |
вателя, т.е. обеспечивает наблюдение за |
|
программы являются практически случай- |
работой конкретного экземпляра контрол- |
|
ными. Кроме того, программная эмуляция |
лера. |
|
попросту невозможна для ситуаций с боль- |
ICE200 – несколько упрощенная версия |
|
шим периодом повторения – уже отладка |
ICE50 со слегка усеченным функционалом. |
|
процессов, длящихся десятки секунд, в ре- |
AVR Dragon – отладочный комплекс в |
Вы должны указать порт, который бу- |
жиме эмуляции становится утомительно |
виде платы, на которой предусмотрена зона |
дет подвержен стимуляции, выбрав его из |
долгой, что тогда говорить о процессах, для- |
макетирования, т.е. в некоторых случаях |
списка Port, а так же задать файл со сти- |
щихся минуты и часы! |
непосредственно на плате этого устройства |
мулирующей последовательностью Input, |
Так же практически невозможна эмуля- |
пользователь может собирать свои схемы. |
после чего нажать кнопку Add Entry для |
ция различных сложных и быстродейству- |
Обеспечивает поддержку отладки как по ин- |
добавления заданной стимуляции к спис- |
ющих интерфейсов, например, CAN или |
терфейсу JTAG, так и Debug Wire, реализу- |
ку операций Action List. Для каждого пор- |
USB, аналоговые устройства так же не эму- |
ет все режимы программирования микро- |
та вы можете указать свой файл аналогич- |
лируются в принципе. |
контроллеров. Поддерживает все микрокон- |
ным способом, после чего нужные уровни |
|
троллеры (часть – при помощи дополнитель- |
поступят в нужные моменты времени на со- |
Обзор средств |
ных средств). |
ответствующие «выводы портов» автома- |
Большинство средств аппаратной от- |
|
тически во время отладки, вам останется |
ладки разработано и поставляется на ры- |
Особенности использования |
лишь следить за реакцией на это вашей |
нок самой фирмой Atmel, имеющиеся на |
Как было сказано, аппаратные отладоч- |
программы. |
рынке образцы сторонних производителей |
ные средства делятся на 2 типа: эмулирую- |
Кроме стимулирования существует об- |
– лишь упрощенные версии фирменных ус- |
щие микроконтроллер и наблюдающие за |
ратная задача – протоколирование сигна- |
тройств, либо их функциональные аналоги. |
микроконтроллером. Первый тип, не смот- |
лов, формируемых микроконтроллером – |
Аппаратная отладка может осуществ- |
ря на гибкость и широкий спектр поддерж- |
Logging. В этом случае сигналы выбранно- |
ляться либо по стандартному интерфейсу |
ки контроллеров, не может быть на 100% |
го порта сохраняются в файл с расширени- |
JTAG, встроенному в некоторые типы мик- |
полным аналогом, т.е. все равно в силу |
ем «log» точно в том же виде, как и при сти- |
роконтроллеров, либо по интерфейсу Debug |
своей работы может иметь отклонения от |
муляции. Выбор функции – стимуляция или |
Wire, так же присутствующему во многих |
поведения реальных кристаллов. Боль- |
протоколирование – осуществляется выбо- |
моделях микроконтроллеров. Необходи- |
шинство таких отклонений известны и пе- |
ром соответствующей опции Function. |
мость аппаратной поддержки указанных |
речислены в соответствующих фирменных |
5 4 |
Радиолюбитель – 07/2010 |
|
СПРАВОЧНЫЙ МАТЕРИАЛ
документах, однако полной гарантии в от- |
Как видите, указатель передвинулся на |
операторов или удалить ненужные куски |
||||
сутствии новых нет. |
|
очередную строку программы (а сама стро- |
кода вообще. |
|||
С другой стороны, «наблюдающие» че- |
ка выделилась). Дальнейшее нажатие кла- |
К сожалению, без оптимизации размер |
||||
рез JTAG или Debug Wire отладчики кате- |
виш F10 или F11 позволит последователь- |
кода получается существенно больше, чем |
||||
горически не подходят для отладки многих |
но исполнить и остальные операторы про- |
с оптимизацией, и для микроконтроллеров |
||||
моделей контроллеров… |
граммы, наблюдая по ходу дела за изме- |
с малым объемом памяти никакой отладки |
||||
Наконец, всем типам аппаратных |
нениями, осуществляемыми ими над пере- |
вообще может не получиться. Тут придется |
||||
средств все равно присуща одна главная |
менными. На рисунке показано содержи- |
идти на компромисс: либо отлаживать про- |
||||
проблема: допуская в любой момент при- |
мое регистра DDRB до исполнения опера- |
грамму с «чудесами», стараясь уследить за |
||||
остановку исполнения программы, они тем |
тора DDRB=255 и после: |
тем, что она делает, либо собрать проект |
||||
самым нарушают «реальность» окружения |
|
без оптимизации и отладить его на микро- |
||||
микроконтроллера. Скажем, остановив |
|
контроллере, максимально близком к нуж- |
||||
контроллер, они не останавливают сигна- |
|
ному, но с бОльшей памятью – так как мно- |
||||
лы с датчиков, подключенных к нему. В |
|
гие контроллеры обладают сходной пери- |
||||
этом случае программа исполняется все |
|
ферией, то погрешность такого метода ми- |
||||
равно не в той среде, как при реальной |
|
нимальна. |
|
|
||
работе устройства – и это следует учиты- |
|
|
|
|
||
вать при отладке. |
|
|
Автоматическое исполнение |
|||
|
|
|
|
программы |
||
ПРОЦЕСС |
|
|
Кроме исполнения программы по ша- |
|||
ОТЛАДКИ ПРОГРАММЫ |
А окно программы при этом будет уже |
гам под контролем пользователя, имеют- |
||||
Итак, рассмотрены практически все |
таким: |
ся и режимы автоматического исполне- |
||||
средства обеспечения отладки – от окна |
|
ния – как по шагам, так и в непрерывном |
||||
AVR Studio до внешних аппаратных отлад- |
|
режиме. |
|
|
||
чиков. Настала пора рассмотреть в дета- |
|
Автоматическое исполнение по шагам |
||||
лях сам процесс отладки, т.е. как исполь- |
|
заключается в том, что AVR Studio самосто- |
||||
зуются и взаимодействуют все рассмот- |
|
ятельно подает сама себе команды Step |
||||
ренные средства. |
|
|
Into. Этот режим позволяет пронаблюдать, |
|||
Начинается процесс отладки с нажатия |
|
как программа исполняется – после каждо- |
||||
кнопки |
или соответствующей горячей |
Далее в программе следует оператор |
го автоматического шага обновляются зна- |
|||
комбинации клавиш Ctrl-Shift-Alt-F5. Ра- |
бесконечного цикла, в котором постоянно |
чения во всех окнах, и программист, наблю- |
||||
бочее пространство AVR Studio при этом |
увеличивается на 1 содержимое PORTB, |
дая за этим процессом, может сделать ка- |
||||
видоизменяется, подготавливаясь к про- |
т.е. на выводах порта формируется возра- |
кие-то выводы. |
||||
цессу отладки. Если используются сред- |
стающая двоичная последовательность |
Запускается автовыполнение по шагам |
||||
ства аппаратной поддержки – они иници- |
сигналов: |
кнопкой |
|
(Auto Step). Остановка этого |
||
ализируются (их подключение должно |
Окно периферии |
процесса осуществляется командой Break |
||||
быть сделано ранее). В окне с исходным |
|
(кнопка |
). |
|
||
текстом появляется желтая стрелка, ука- |
|
Необходимость обновления большого |
||||
зывающая на строку программы, готовую |
|
количества информации на дисплее дела- |
||||
к исполнению: |
|
|
ет этот режим достаточно медленным. Если |
|||
|
|
|
|
необходимо отладить программу, содержа- |
||
|
|
|
|
щую большие участки уже проверенного |
||
|
|
|
|
кода или же длительные циклы, можно вос- |
||
|
|
|
|
пользоваться режимом автоматического ис- |
||
|
|
|
|
полнения, который включается командой |
||
|
|
|
|
Run (кнопка |
). В этом случае вся ин- |
|
Теперь, в зависимости от намерений |
|
формация во всех окнах и панелях «замо- |
||||
программиста, можно открыть любое из |
|
раживается», в то время как программа «ис- |
||||
рассмотренных ранее окон для просмот- |
|
полняется» на полной скорости. В случае ис- |
||||
ра переменных, памяти, регистров и т.п. – |
|
пользования аппаратных отладчиков про- |
||||
на этом подготовительные операции за- |
|
исходит действительное исполнение про- |
||||
вершены. |
|
|
Пошаговое исполнение может осуще- |
граммы, т.е. микроконтроллер работает на |
||
|
|
|
ствляться и в том случае, когда открыто окно |
заданной тактовой частоте, а в случае эму- |
||
Пошаговое исполнение |
дизассемблера – в этом случае каждый шаг |
ляции – «виртуальное» исполнение проис- |
||||
программы |
|
будет соответствовать одной ассемблерной |
ходит на максимально возможной скорос- |
|||
После подготовки начинается, соб- |
команде. |
ти эмуляции, обеспечиваемой мощностью |
||||
ственно, процедура отладки. Обычно она |
Следует отметить, что нормальная от- |
компьютера. |
|
|||
заключается в пошаговом исполнении про- |
ладка возможна только при компиляции |
Остановить режим исполнения так же |
||||
граммы, т.е. исполнению операторов од- |
программы с отключенной оптимизацией |
можно командой Break. |
||||
ного за другим. Под пошаговым исполне- |
(см. главу «Параметры компиляции проек- |
|
|
|
||
нием подразумевается то, что каждый опе- |
та»). При включении оптимизации при от- |
Точки останова |
||||
ратор исполняется только после того, как |
ладке могут наблюдаться «чудеса»: то по- |
Кроме принудительной остановки ис- |
||||
программист даст на это команду – нажмет |
рядок исполнения строк программы не со- |
полнения программы, в котором не очень |
||||
кнопку |
или |
(т.е. команды Step Into |
ответствует ожиданиям, то некоторые пе- |
много пользы, имеется гораздо более удоб- |
||
или Step Over – см. меню Debug – отлад- |
ременные недоступны для наблюдения в |
ный способ – указание точки останова |
||||
ка). Содержимое окна немного изменится: |
окне Watch, или же в какой-то строке про- |
(breakpoint). |
|
|||
|
|
|
граммы невозможно поставить точку оста- |
AVR Studio реализует 2 типа точек ос- |
||
|
|
|
нова. Эти эффекты – следствие работы оп- |
танова – программная (Program breakpoint) |
||
|
|
|
тимизатора, который просто может выбро- |
или по изменению данных (Data breakpoint). |
||
|
|
|
сить за ненадобностью некоторые строки |
Программная точка останова просто поме- |
||
|
|
|
программы, изменить (не нарушая логику |
чает строку программы, дойдя до которой |
||
|
|
|
работы) последовательность выполнения |
процесс автоисполнения будет остановлен, |
||
|
|
|
5 5 |
Радиолюбитель – 07/2010 |
|
|
|
|
|
|
СПРАВОЧНЫЙ МАТЕРИАЛ
при этом сама строка еще не будет вы- |
нем можно удалить точку, выделив стро- |
|
|
|
полнена. Такие точки останова очень по- |
ку и нажав Del, или временно деактиви- |
|
|
|
лезны при отладке долгих процессов, пре- |
ровать, «сняв» галочку с нужной точки (в |
|
|
|
рываний и т.п. В этом случае весь неин- |
этом случае останова не будет происхо- |
|
|
|
тересный для программиста код испол- |
дить, хотя сама точка останется). Но го- |
|
|
|
няется автоматически и достаточно быс- |
раздо больше возможностей предостав- |
|
|
|
тро, а со строки, отмеченной точкой ос- |
ляет кнопка |
в этом окне (или коман- |
|
|
танова, отладка ведется по шагам. |
да Properties из всплывающего меню), |
|
|
|
Остановка по изменению данных про- |
которая открывает следующее окно: |
|
|
|
исходит лишь в том случае, когда програм- |
|
|
|
|
ма изменит значение указанной перемен- |
|
|
|
|
ной (или указанной области памяти). Этот |
|
|
|
|
режим очень полезен для поиска мест в |
|
|
|
|
программе, где происходит незапланиро- |
|
|
|
|
ванное изменение переменной. Например, |
|
|
|
|
в ходе отладки обнаруживается, что гло- |
|
|
Наконец, если выбран конкретный ад- |
|
бальная переменная tmp принимает зна- |
|
|
рес – активируется поле для его ввода. |
|
чение, которое программист не предус- |
|
|
Следует учесть, что если окажется, что |
|
матривал, в результате чего программа |
|
|
заданный адрес находится «внутри» ка- |
|
исполняется неверно. Если программа |
|
|
кого-то оператора, то в окне текста про- |
|
состоит из нескольких модулей, а каждый |
|
|
граммы никакой отметки соответствую- |
|
модуль – из сотен строк, то простым ана- |
|
|
щей строки не будет, увидеть ее можно |
|
лизом исходного текста программы най- |
|
|
будет лишь в окне дизассемблера, одна- |
|
ти место этого изменения очень сложно, |
|
|
ко остановка будет происходить все рав- |
|
а если это связано с переменными-указа- |
В этом окне можно настроить много |
но. Только вот с выделением строки, на |
||
телями, то может и вообще невозможно. |
параметров установленной программной |
которой произошла остановка, может |
||
В этом случае программист задает точку |
точки останова. Начнем рассмотрение |
возникнуть небольшая проблема: после |
||
остановки по любому изменению перемен- |
снизу вверх, т.к. внизу расположены об- |
оптимизации, как было сказано, не все- |
||
ной tmp и запускает программу на испол- |
щие для разных режимов опции. Во-пер- |
гда имеется возможность однозначно оп- |
||
нение. Всякий раз, как только произойдет |
вых, опция Enabled управляет активнос- |
ределить, какому именно оператору Си |
||
модификация содержимого переменной, |
тью точки (галочка в списке). Во-вторых, |
соответствует конкретная ассемблерная |
||
автоисполнение будет прекращено на пер- |
имеется возможность не останавливать |
команда. В этом случае после остановки |
||
вом же операторе после модификации. |
исполнение при проходе точки, а только |
может быть выделена строка с операто- |
||
Проанализировав это место в тексте про- |
обновить содержимое всех окон AVR |
ром, следующим за тем, внутри которо- |
||
граммы и сопоставив при необходимости |
Studio – за это отвечает опция Continue |
го произошла остановка. |
||
его с текущим содержимым других пере- |
execution after the views have been |
Возможностей программных точек |
||
менных, программист либо продолжает |
updated. В-третьих, имеется возможность |
останова, как видите, достаточно нема- |
||
автоисполнение (если это место вне по- |
остановиться не сразу, а лишь после оп- |
ло, но возможностей остановки по изме- |
||
дозрений), либо приступает к исправле- |
ределенного количества проходов по точ- |
нению данных существенно больше! |
||
нию найденной ошибки. |
ке (очень удобно при отладке циклов) – |
Установить точку остановки по изме- |
||
Установка обычных точек остановки |
для этого следует указать в окне Break |
нению данных можно либо при помощи |
||
происходит простым нажатием кнопки |
execution after значение, большее 1. Ря- |
меню «Debug» (команда New Breakpoint |
||
(или командой Toggle Breakpoint), при этом |
дом с этим окном приводится для справ- |
– Data breakpoint), либо непосредствен- |
||
строка, в которой находится курсор (тексто- |
ки число проходов через точку к текуще- |
но в окне просмотра точек остановки |
||
вый, а не «мышиный»), отмечается красной |
му моменту (на рисунке – 0 проходов). |
Breakpoints and Tracepoints. Во втором |
||
точкой: |
Теперь рассмотрим остальные опции |
случае для этого следует использовать |
||
|
сверху вниз. |
|
кнопку |
или команду New из всплы- |
|
Bound to – указывает, к чему применя- |
вающего меню. При любом способе от- |
||
|
ется точка. Варианты возможны такие: File |
крывается окно настройки параметров |
||
|
– строка в файле модуля, Function – функ- |
точки останова: |
||
|
ция в модуле или Address – адрес машин- |
|
|
|
|
ного кода в программе. Переключения об- |
|
|
|
|
ласти точки изменяет вид остальной части |
|
|
|
|
окна, делая одни опции активными, а дру- |
|
|
|
|
гие – недоступными. |
|
|
|
|
Если точка назначается строке в фай- |
|
|
|
Одновременно с этим в окне |
ле, то вы можете указать собственно имя |
|
|
|
Breakpoints and Tracepoints появляется |
файла в поле File и номер строки в нем – |
|
|
|
новая строка: |
поле Line (но гораздо проще это сделать, |
|
|
|
|
как было сказано ранее – командой Toggle |
|
|
|
|
Breakpoint). |
|
|
|
|
Для точки на функции станет активным |
|
|
|
|
поле выбора функций программы – |
|
|
|
|
Function. Вы должны будете либо ввести |
|
|
|
|
имя функции в этом поле (в особом форма- |
|
|
|
В этом окне указано, что точка оста- |
те), либо, что удобнее, нажать кнопочку ря- |
|
|
|
новки установлена в модуле demo1.c в |
дом с полем и выбрать функцию из списка |
|
|
|
строке с номером 8, эта точка в настоя- |
(см. рисунок в следующей колонке). |
Параметров, как видите, существенно |
||
щее время активирована (отмечена га- |
В этом окне в виде древовидной струк- |
больше, чем для программной точки. Самые |
||
лочкой) и вызывает остановку всегда. |
туры показаны все функции проекта, до- |
нижние опции – точно такие же, как и ра- |
||
Данное окно позволяет гибко управлять |
статочно выбрать нужную и нажать кноп- |
нее, а вот верхние следует рассмотреть |
||
точками останова. Непосредственно в |
ку ОК. |
|
подробно. |
|
5 6 |
Радиолюбитель – 07/2010 |
|
СПРАВОЧНЫЙ МАТЕРИАЛ
Самый верхний элемент – список усло- |
чтение) и Write only (только запись). В пер- |
Частично эту проблему можно решить |
вий срабатывания точки останова – Break |
вом случае проверка происходит после лю- |
при помощи других средств отладки, наи- |
when (остановить, когда). В раскрываю- |
бого обращения к переменной, во втором – |
более интересным из которых следует при- |
щемся списке перечислены все возможные |
только после считывания, в третьем – толь- |
знать программы симуляции электронных |
варианты условий: |
ко после записи. |
схем. К сожалению, все эти программы – |
· Location is accessed – осуществлен |
Далее следует опция выбора способа |
исключительно коммерческие, т.е. далеко |
любой доступ к переменной |
контроля многобайтных переменных: MSB |
не бесплатные. |
· Location content is equal to a value – |
– только старший байт или Any byte – лю- |
Одна из очень удачных программ для |
значение переменной совпадает с указан- |
бой байт. |
этого – небезызвестный ISIS Proteus |
ным значением |
Группа опций Custom data type (пользо- |
Professional фирмы Labcenter Electronics. |
· Location content is not equal to a value |
вательский тип данных) позволяет задать |
Эта программа позволяет «нарисовать» |
– значение переменной не равно указанно- |
режим проверки переменных нестандарт- |
принципиальную схему устройства с мик- |
му значению |
ных типов. Активировав эту опцию, следу- |
роконтроллером, используя «интерактив- |
· Location content is greater than a value |
ет выбрать базовый тип переменной Base |
ные» элементы, а затем «загрузить» в мик- |
– значение переменной больше указанного |
type и указать ее фактический размер в |
роконтроллер написанную программу и |
значения |
байтах Size. Это необходимо делать в тех |
«подать питание» на схему. При этом про- |
· Location content is less than a value – |
случаях, если контролируются переменные |
граммно моделируется поведение всех |
значение переменной меньше указанного |
не стандартных типов, а введенных пользо- |
элементов – от микроконтроллера до ре- |
значения |
вателем. |
зистора и транзистора, по возможности все |
· Location content is greater than or |
Группа опций Custom scope (область |
происходящие в схеме изменения отобра- |
equal to a value – значение переменной |
просмотра) позволяет указать область кон- |
жаются практически в реальном времени |
больше или равно указанному значению |
тролируемой памяти, задав начальный и |
на дисплее – «загораются» светодиоды, |
· Location content is less than or equal |
конечный адреса – поля Start addr и End |
«вращаются» моторы, динамики издают |
to a value – значение переменной меньше |
addr соответственно. |
звуки и т.п. Кроме чисто визуальных |
или равно указанному значению |
Следует отметить, что в большинстве |
средств можно использовать «виртуаль- |
· Location content is within a range – |
случаев пользователю не нужно произво- |
ные» инструменты – осциллограф, генера- |
значение переменной находится в указан- |
дить настройку режимов контроля перемен- |
тор сигналов и т.п. |
ном диапазоне |
ных, согласившись с параметрами по умол- |
Эта программа позволяет не только |
· Location content is outside a range – |
чанию. |
увидеть внешние эффекты, демонстриру- |
значение переменной вне указанного диа- |
Возвращаясь немного назад, к окну |
ющие результат работы программы, но и |
пазона |
просмотра содержимого памяти, следует |
так же, как и в AVR Studio, проводить от- |
· Bits of a location is equal to a value – |
сказать, что в его всплывающем меню име- |
ладку по шагам, просматривая содержи- |
определенные биты в переменной имеют |
ется команда установки точки останова по |
мое переменных и памяти. К сожалению, |
заданные значения |
изменению любой области памяти без при- |
изменить вручную содержимое перемен- |
· Bits of a location is not equal to a value |
вязки к конкретной переменной Add Data |
ных в этом случае невозможно. |
– определенные биты в переменной не со- |
breakpoint. Пользоваться этой возможнос- |
Начиная с версии AVR Studio 4.16 по- |
впадают с заданным значением |
тью очень удобно, например, для контроля |
явилась возможность интеграции с уста- |
Если для указанной переменной (в |
вершины стека программы. |
новленным Proteus ISIS. Если протеус был |
поле Location) выполняется выбранное |
Когда происходит срабатывание точки |
уже установлен к моменту установки AVR |
условие – происходит срабатывание точ- |
остановки, она отмечается стрелочкой жел- |
Studio, то в списке платформ для отладки |
ки и автовыполнение программы оста- |
того цвета: |
(см. главу «Мастер проектов» – раздел о |
навливается (разумеется, лишь в том |
|
выборе платформы отладки Select debug |
случае, если все другие условия этому не |
|
platform and device) появится платформа |
противоречат). В зависимости от того, |
|
Proteus VSM Viewer. Если выбрать эту |
какое именно условие выбрано, меняют- |
|
платформу, то при запуске отладки про- |
ся остальные поля ввода значений. Так, |
|
изойдет «внедрение» протеуса внутрь |
например, для проверки битов в перемен- |
|
окна AVR Studio – при этом схему отлажи- |
ной, появляется поле ввода маски |
|
ваемого устройства можно создать там, |
Bitmask (в котором надо отметить еди- |
Следует дополнительно отметить, что |
а отлаживать в студии. У этого гибрида |
ничными значениями те биты, которые |
в окне Breakpoints and Tracepoints могут |
масса достоинств – все плюсы отладки по |
анализируются в переменной), а при про- |
быть указаны (а в тексте программы – рас- |
точкам останова и просмотру/изменению |
верке значения на попадание в диапазон |
ставлены) не только точки остановки, но и |
переменных от студии и все плюсы точной |
– появляются поля ввода минимального |
точки трассировки (Tracepoints), для кото- |
имитации аналоговой периферии и схемы |
и максимального значения. Value – это |
рых имеются соответствующие команды. |
от протеуса. Недостаток только один – тре- |
поле значения, с которым сравнивается |
Точка трассировки позволяет проследить |
бования к памяти и мощности процессора |
указанная в Location переменная. Выбор |
момент «прохода» программы через указан- |
компьютера. Так же порой эта связка мо- |
переменной проще всего осуществить из |
ную строку, т.е. позволяет получить в неко- |
жет «упасть», т.е. обе программы завер- |
списка, открывающегося по нажатию |
тором смысле «протокол» исполнения про- |
шаются по ошибке (редкое явление). |
кнопки с многоточием рядом с полем |
граммы. Однако эта возможность реализу- |
Proteus был бы исключительно незаме- |
Location – вид этого списка совпадает с |
ется только при наличии средств аппарат- |
нимым средством для любого разработчи- |
ранее рассмотренным списком выбора |
ной поддержки, в режиме «виртуальной» |
ка, если бы не был весьма дорогостоящим |
функций, с той лишь разницей, что вы- |
отладки недоступна и потому не рассмат- |
продуктом. |
бирать следует переменные (локальные |
ривается. |
|
или глобальные). |
|
|
Далее следуют поля и опции «тонкой» |
Альтернативные средства |
|
настройки режима контроля значения пере- |
отладки |
|
менных. |
Не смотря на достаточно широкие воз- |
|
Поле Access type позволяет указать |
можности виртуального исполнения про- |
|
способ обращения к переменной, после ко- |
граммы, часть проблем с их помощью ре- |
|
торого осуществляется проверка условия. |
шить невозможно без использования либо |
|
Есть три варианта: Read/Write (любое об- |
аппаратных средств, либо без натурных |
|
ращение к переменной), Read only (только |
испытаний устройства. |
Продолжение в №8/2010 |
|
|
|
|
|
|
|
|
|
5 7 |
Радиолюбитель – 07/2010 |
|
|
|
|
|
|
