Библиотека Simple Dumping Monitor для Arduino-совместимых плат на базе микроконтрллеров ATmega позволяет выводить дампы регистров, таймеров и памяти RAM, Flash и EEPROM, а также дамп таблицы векторов прерываний.
Библиотекой версии 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).
Для использования библиотеки, нужно скачать файл с архивом. В архиве находится папка DumpMon, которую нужно распаковать в директорий libraries директория с библиотеками Arduino IDE. В результате должно получиться libraries/DumpMon.
В папке DumpMon/Examples находятся четыре скетча-примера:
dumpmon.pde -- для использования библиотеки как самостоятельного скетча.
dumpmonBlink.pde -- как пример Blink, к которому добавлены функции мониторинга состояния памяти, регистров и счётчиков.
dumpmonDebug.pde -- пример использования библиотеки в качестве символьного отладчика.
dumpmonISR.ino -- пример использования точек останова в обработчике прерываний ISR().
После успешной компиляции скетча и загрузки его в память 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 для вывода дампов из скетча, следует вызвать функцию dumpmonSetup() из функции setup() скетча:
void setup() {
dumpmonSetup(19200); // Инициализация библиотеки DumpMon
}
По умолчанию использует для коммуникации последовательный порт Serial (USART0). Для использования другого последовательного порта микроконтроллеров ATmega1280/2560 (Serial1, Serial2 или Serial3) следует добавить ссылку на данный порт в вызов функции dumpmonSetup():
dumpmonSetup(&Serial2, 19200); // Инициализация библиотеки DumpMon
// для коммуникации через порт Serial2
В функцию loop() скетча следует добавить вызов функции dumpmonLoop():
void loop() {
dumpmonLoop(); // Вызов функции цикла библиотеки DumpMon
}
Скачать библиотеку Simple Dumping Monitor можно в разделе Files проекта на сервере SourceForge.
Подробнее о функциях отладчика можно прочитать в статье Отладка скетчей Arduino,
также читайте про Точки останова в обработчиках ISR().
Автор: Андрей Шаройко <vanyamboe@gmail.com>