-

Осваиваем AVR!

-

новости  | с чего начать? | ссылки | учебник | примеры | программатор | отладочные модули |  осциллограф | давно это былоdownload | сотрудничество | пишите мне

Отладочные модули - что к чему

Загрузить

Загрузить все отладочные модули в одном флаконе (~35 кБ)

Ошибку в монтаже чаще можно найти при помощи обычного тестера, если есть осциллограф или хотя бы логический пробник - совсем хорошо. А вот ошибку в программе найти сложнее. Это не персоналка и оконных отладчиков нету. Как впрочем и неоконных тоже :-)

А посмотреть внутрь ну очень хочется, ну хоть одним глазком - что там делается? Особенно при первом запуске отлаживаемой (и естественно, не работающей) программы.

Я рассуждал так. Раз уж у нас шлейф подключен на SPI интерфейс, имею в виду шлейф программатора, то его и надо использовать. То есть организовать обмен программы на компьютере (которая нам на привычном мониторе все отобразит) с отлаживаемым AVR. Так и сделал.

prost_ab - "попроще", формат AB
prost_26 - "попроще", формат AB, для Tiny26
prost_asm -"попроще", ассемблер
prost_c -  "попроще", IAR C

sloz_ab - "покруче", формат AB
sloz_asm -"покруче",ассемблер
sloz_c -  "покруче", IAR C

Итак, ваше устройство собрано, программа написана и зашита в МК. Включаем и убеждаемся в том, что устройство не работает. :-( Не надо паниковать, это обычное дело. Во первых, могут быть ошибки в монтаже (проверяем, исправляем), во вторых - ошибки программы.

Тут надо отметить, что SPI интерфейс несколько "непривычный" (см. рис справа). По сути, два связанных по SPI устройства имеют каждый по восьмиразрядному регистру, связанные "в кольцо". Одно из устройств управляет обменом, генерируя стробы (master), второе пассивно - slave. Обмен происходит одновременно - мастер, передавая свой байт, одновременно получает байт от slave, то есть тут нельзя сделать обмен типа "запрос-ответ". Поэтому я организовал как бы два потока информации. 

Что из себя представляет SPI

SPI интерфейс

Важно! В некоторых (теперь уже устаревших) АВР-ах нет SPI интерфейса - соответственно, на них отладка невозможна (например, AT90s1200, AT90s2313)

Важно! SPI интерфейс в своем составе имеет вход SS - slave select - для того чтобы отладка работала, этот вывод необходимо подключить на землю через резистор ~1кОм

Мастером, естественно, является компьютер, он постоянно передает данные на AVR.

С AVRом сложнее. Ведь обмен с компьютером для него задача неосновная, скажем даже - мешающая. Она должна занимать как можно меньше ресурсов - и по времени, и по занимаемой памяти, обрабатывая прерывания SPI интерфейса.

Исходя из таких требований, мною были написаны два модуля - один попроще, второй "покруче". Сейчас есть несколько вариантов таких модулей - формат ассемблера, Algorithm Builder, C... Поэтому будем отталкиваться от протокола обмена. "Попроще" и "покруче" - так и будем называть в дальнейшем. 

Протокол который "попроще" хорошо подходит для МК с небольшим ОЗУ, типа Tiny26, 2313...

 

Отладочный модуль "попроще"

Итак, пусть нас устраивает отладочный модуль "попроще". Подключаем к проекту (как это сделать - рассмотрим потом), компилируем, зашиваем МК. Жмем кнопочку с малой лупой - откроется следующее окно (см. справа). Что есть что? 


Старт-Стоп - пуск и остановка обмена. Иногда удобно. Программа запускается в режиме "Стоп", то есть после запуска - нажмите "Старт"!

Кнопочки с цифрами 1..9 - нажмите и в переменную _spicmd программы микроконтроллера будет занесено соответствующее число. Я применяю для отладки - например, организовать точку останова, или ветвление по содержимому.

Если вариантов 1..9 вам оказалось маловато, можно ввести любое число в окошке ниже и нажать кнопочку Send. Результат будет тем же - это число окажется в _spicmd

"запись" - вот тут вы сможете в какой-то степени вмешаться в работу. Окошко слева - адрес, справа - данные(байт!), кнопочка Send - данные будут записаны по адресу. Ограничение - адрес не более 0x7F. Для начальной отладки этого достаточно, захватывает регистры (0..0x1F), периферию (0x20-0x5F) и начало ОЗУ (0x60-0x7F). Если этого недостаточно, используйте отладочный модуль 2.

Надо иметь в виду, что адресное пространство AVR линейное, запись по адресу 0 аналогична записи в R0, запись по адресу 0x21 аналогична команде OUT 1,число. Замечу - за результаты отвечаете сами! Физически ничего не повредите, а вот "повесить" программу AVRа раз плюнуть. Да, если по ячейке в окне отображения "Ctrl-кликнуть" - то ее адрес занесется в окно адреса. И еще кнопочка "0" - занести в тот адрес не число в окошке, а ноль. Иногда удобно.

Но мы совсем забыли про главное - окно отображения информации! Хотя там все просто, имя регистра или адрес - и содержимое. Формат содержимого можно менять - правой кнопкой мыши кликните на нужной вам ячейке. (на рисунке как раз видно меню выбора формата). В столбце имен/адресов тоже можно вместо них вводить имена - кликните по имени/адресу. Думаю, отлаживаться проще, когда вместо безликого R10 написано, например, Counter. При выходе из отладчика введенные имена сохраняются.

Кнопка "синхро"  -для защиты от сбоев обмена при помехах (у нас в соседней комнате стоит станок...) а потеря строба нарушает всю работу  - это ведь не асинхронный обмен. Чтобы программу не сбрасывать, теперь достаточно несколько раз ткнуть эту кнопочку.

 

Пойдем по порядку... Числа сверху - слева количество пакетов обмена, справа - ошибок обмена. Остались исторически со времен отладки, ну да не мешают...

Движок вверху слева - скорость обмена, точнее, пауза между пакетами. (Пакет - содержимое РОН и ОЗУ от 0x60 до 0xDF, с контрольной суммой). Чем быстрее заставите обмениваться - тем быстрее будет обновляться информация, и тем больше будет нагружен обменом AVR. Тут каждый выбирает, что ему важнее.

Окно отладчика "попроще"

Вот, вроде, и все... Подведем итоги. Я считаю основной ценностью этого отладчика его "реалтаймовость", если здесь можно применить такой термин. Работа отладчика и основной программы, в общем-то, ничем не связана (кроме общей памяти). Никаких точек останова (хотя, при желании, вы их можете элементарно реализовать простым циклом ожидания числа в _spicmd). Поэтому надо учесть - никаких быстропротекающих процессов вы при его помощи не зафиксируете. Если вам нужно видеть какое-либо значение, например, снятое с АЦП - не поленитесь положить его в отдельную ячейку ОЗУ, ведь РОН обычно используются в разных целях, и в более-менее сложных программах что-либо разобрать в мешанине чисел будет сложно. Но зато отладка никоим образом не повлияет на реалтаймовость основной программы.

Кликнув по моему аватару с пивной кружкой - вы сможете загрузить MAP файл IAR-компилятора или LST файл имен Algorithm Builder (настройка линкера IAR будет описана далее). Этот фрагмент написан был сильно второпях, работает не идеально, но жизнь таки облегчает.

Отладочный модуль покруче

Если есть необходимость просмотра (и коррекции) всего ОЗУ микроконтроллера, используйте отладочный модуль "покруче" 

Окно программы на персоналке отличается от предыдущей только наличием движка слева от окна данных, определяющего адрес, с которого отображается ОЗУ данных. Регистры отображаются всегда! (Кроме R16,R17,R30,R31, которые используются в прерывании SPI и в них будет совсем не то, что в головной программе).

Адрес, с которого отображается ОЗУ, выводится рядом с кнопкой Reset - это, естественно, сброс микроконтроллера. Под этим адресом - выпадающее меню, позволяющее сразу "выйти" на нужную переменную. Работает после того, как загружен MAP файл.

Внимание: После нажатия на кнопку Reset адрес начала отображения ОЗУ будет неопределен, просто подвиньте движок определения начального адреса вверх-вниз. В следующей версии исправлю!

Внимание: начало отображения ОЗУ может быть установлено на адрес, меньший 0x60, то есть на адреса периферии. Учтите, что чтение регистров периферийных устройств может нарушить работу программы!


магазин кальянов на сенной ·· Лазерное оборудование для гравировки по металлу еще здесь.  

 

Настройка линкера IAR C

Для того, чтобы отладочный модуль смог прочесть MAP файл,  линкер IAR C надо настроить следующим образом (см. на картинки - думаю, все там понятно). Правда это картинки от версии 3.20, но и в новых настраивается аналогично. 


Rekl:магазин кальянов на сенной ·· Лазерное оборудование для гравировки по металлу еще здесь.

 

(с)nml 10-Jul-2009