Дамп регистров, памяти, прерываний и таймеров Arduino

Библиотека Simple Dumping Monitor для Arduino-совместимых плат на базе микроконтрллеров ATmega позволяет выводить дампы регистров, таймеров и памяти RAM, Flash и EEPROM, а также дамп таблицы векторов прерываний.

О библиотеке Simple Dumping Monitor

Библиотекой версии 0.21 поддерживаются микроконтроллеры:

  • ATmega48P/88P/168P/328P -- платы Arduino

  • ATmega640/1280/1281/2560/2561 -- платы Arduino MEGA

  • ATmega16U4/32U4 -- платы Arduino Leonardo

  • ATmega164A/PA/324A/PA/644A/PA/1284/P -- платы Sanguino/Daiduino

Начиная с версии 0.6 в библиотеку добавлены функции простого символьного отладчика.

В скомпилированном виде библиотека занимает около 11 Кб памяти (около 15 Кб -- Arduino MEGA). Требования к ОЗУ (RAM) не превышают 1 Кбайт (277 байт для примера dumpmon.pde, 377 байт для примера dumpmonDebug.pde).

Установка библиотеки Simple Dumping Monitor

Для использования библиотеки, нужно скачать файл с архивом. В архиве находится папка DumpMon, которую нужно распаковать в директорий libraries директория с библиотеками Arduino IDE. В результате должно получиться libraries/DumpMon.

В папке DumpMon/Examples находятся четыре скетча-примера:

  • dumpmon.pde -- для использования библиотеки как самостоятельного скетча.

  • dumpmonBlink.pde -- как пример Blink, к которому добавлены функции мониторинга состояния памяти, регистров и счётчиков.

  • dumpmonDebug.pde -- пример использования библиотеки в качестве символьного отладчика.

  • dumpmonISR.ino -- пример использования точек останова в обработчике прерываний ISR().

Команды вывода дампов библиотеки Simple Dumping Monitor

После успешной компиляции скетча и загрузки его в память Arduino, нужно открыть Serial Monitor, включить нужную скорость обмена (в примерах используется скорость 19200 бод). После этого можно отправлять Arduino команды для получения дампов:

  • ? -- вывод подсказки.

  • R -- дамп текущего состояния регистров.

  • I -- дамп таблицы веторов прерываний.

  • V -- количество доступной памяти RAM

  • T0 -- дамп состояния таймера 0.

  • T1 -- дамп состояния таймера 1.

  • T2 -- дамп состояния таймера 2.

  • T3..T5 -- дамп состояния таймеров 3..5 (Arduino MEGA).

  • M000 -- дамп памяти RAM (ОЗУ), начиная с адреса 000.

  • F0000 -- дамп памяти Flash, начиная с адреса 0000.

  • O000 -- дамп памяти EEPROM, начиная с адреса 000.

  • A -- повторить предыдущую команду.

  • С -- продолжить вывод дампа (для таймеров - показать следующий таймер, для регистров и прерываний - повторить вывод).

Адреса вводятся в шестнадцатиричном формате. Команды и адреса можно вводить как в нижнем, так и в верхнем регистрах.

Обратите внимание, что при вводе адреса в памяти нужно вводить полный адрес (например F0100 вместо F100). У разных микроконтроллеров разная конфигурация памяти, и при выводе подсказки по команде ? отображается количество цифр в адресе для данного типа памяти данного микроконтроллера.

Инициализация библиотеки Simple Dumping Monitor

Для использования библиотеки Simple Dumping Monitor для вывода дампов из скетча, следует вызвать функцию dumpmonSetup() из функции setup() скетча:

void setup() {

dumpmonSetup(19200); // Инициализация библиотеки DumpMon

}

По умолчанию использует для коммуникации последовательный порт Serial (USART0). Для использования другого последовательного порта микроконтроллеров ATmega1280/2560 (Serial1, Serial2 или Serial3) следует добавить ссылку на данный порт в вызов функции dumpmonSetup():

dumpmonSetup(&Serial2, 19200); // Инициализация библиотеки DumpMon

// для коммуникации через порт Serial2

Функция loop() скетча

В функцию loop() скетча следует добавить вызов функции dumpmonLoop():

void loop() {

dumpmonLoop(); // Вызов функции цикла библиотеки DumpMon

}

Скачать библиотеку Simple Dumping Monitor

Скачать библиотеку Simple Dumping Monitor можно в разделе Files проекта на сервере SourceForge.

Скачать DumpMon последней версии.

Подробнее о функциях отладчика можно прочитать в статье Отладка скетчей Arduino,

также читайте про Точки останова в обработчиках ISR().

Автор: Андрей Шаройко <vanyamboe@gmail.com>