Отладочный монитор для
встраиваемых систем
(debug monitor, debug agent, debug stub)

Максим Салов
max.salov@gmail.com
Для чего?

Для отладки прошивки
микроконтроллеров
Существующие методы
отладки







Симуляция на ПК
Внутрисхемная эмуляция (ICE)
Отладочный вывод (printf, log, syslog)
Вдумчивый взгляд
Отладочный монитор
Что должен уметь отладчик








Читать/писать регистры
Читать/писать память
Продолжить выполнение программы
Остановить выполнение программы
Выполнить одну инструкцию
Вывести отладочные сообщения
Инфраструктура

 Средства разработки (binutils, gcc,
newlib, gdb)
 Отладочная плата
 Интерфейс подключения к ПК
(COM-порт/ USB-UART преобразователь/
Ethernet)
Протокол обмена
GDB:
Stub:
Stub:
GDB:

$request#checksum
+
$response#checksum
+

Исключения:
 отладочный вывод
Stub: $Oascii-hex-string#checksum
GDB: +
 прерывание исполнения
BREAK || SIGBREAK
Базовые команды









'?' — запрос текущего состояния
'g'/'G' — читать/писать регистры
'p'/'P' — читать/писать регистр
'm'/'M' — читать/писать память
'c' — продолжить выполнение
's' — выполнить одну инструкцию
'q' — запрос информации
'z'/'Z' — установить/удалить точку
останова
Требования с отладочному
монитору
 Минимальные используемые ресурсы
(память, периферийные модули)
 Максимальная прозрачность работы
 Минимальные ограничения,
налагаемые на основную программу
 Простота использования (физическое
подключение и программное)
Требования к МК

 Наличие модуля связи (UART, Ethernet
MAC/PHY)
 Наличие инструкции программного
прерывания (размер которой меньше
либо равен размеру любой другой
инструкции)
Структура монитора
Платформозависимые функции
 Работа с контекстом
 Управление интерфейсом обмена
 Управление точками останова и
пошаговым выполнением
Платформонезависимые функции
 Приём/отправка команд
 Обработка команд
 Выполнение команд чтения/записи
регистров и памяти
Пример

https://github.com/msalov/rx-gdb-stub
Target:
Renesas RX62N — 32-bit CISC
Interface: UART / RS-232 (115200 8N1)
Clock:
96 Mhz (макс. 100 Mhz)
Использование
Ограничения
 Запрет на запрет прерываний
 Запрет на спящие режимы
 Запрет на изменение частоты работы
периферии
 Периферия продолжает работу при
остановке ПО
 Чтение регистров периферии может
иметь побочные эффекты
 Нет записи в ПЗУ (отладка кода в ПЗУ
невозможна)
Возможные улучшения






Stand-alone версия в ПЗУ
Портирование на RX63N (GR-Sakura)
Возможность изменения ПЗУ
Увеличение скорости обмена
Итоги
Плюсы:
 Простота / Дешевизна
 Простота обновления
Минусы:
 Debug и Release версии отличаются
 Резервирование ресурсов для отладки
Статистика
190 мнемоник команд ассемблера
147 строк на ассемблере (из которых:
70 — сохранение контекста,
71 — восстановление,
6 — в функции отладочного вывода)
~529 строк — функция определения
адреса следующей инструкции
~478 строк — платформонезависимые
функции
~1402 строки итого
Спасибо за внимание.

Максим Салов - Отладочный монитор