Максим Салов - Отладочный монитор
DESCRIPTION
Доклад Максима Салова на февральской линуксовке MLUG 2014TRANSCRIPT
Отладочный монитор для встраиваемых систем
(debug monitor, debug agent, debug stub)
Максим Салов[email protected]
Для чего?
Для отладки прошивки микроконтроллеров
Существующие методы отладки
Симуляция на ПК Внутрисхемная эмуляция (ICE) Отладочный вывод (printf, log, syslog) Вдумчивый взгляд Отладочный монитор
Что должен уметь отладчик
Читать/писать регистры Читать/писать память Продолжить выполнение программы Остановить выполнение программы Выполнить одну инструкцию Вывести отладочные сообщения
Инфраструктура
Средства разработки (binutils, gcc, newlib, gdb)
Отладочная плата Интерфейс подключения к ПК
(COM-порт/ USB-UART преобразователь/ Ethernet)
Протокол обмена
GDB: $request#checksumStub: +Stub: $response#checksumGDB: +
Исключения: отладочный выводStub: $Oascii-hex-string#checksumGDB: + прерывание исполнения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 CISCInterface: 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 строки итого
Статистика
Спасибо за внимание.