Данная статья описывает создание дебаг интерфейса для различных микроконтроллеров.
На настоящий момент вы можете отлаживать свою программу через jtag, имеея специальный отладчик (JLINK, FT232 JTAG, STLINK и.т.д). Моя идея отлаживать программу через любой интерфейс микроконтроллера, даже эмулированный, включая удаленный интерфейсы такие как GPRS, Wifi, Lora и.т.д. Типичная схема отладки выглядит так. 

         Моя схема отладки выглядит так.  

        Похожая схема применяется для отладки микроконтроллеров Xtensa l106(ESP8266) там отладка ведется через интерфейс uart. Моя идея более обширная я придумал, как реализовать данную схему не только на микроконтроллерах Xtensa, Cortex-M которые имеют аппаратную поддержку, но и микроконтроллеры, которые такой поддержки не имеют, например, AVR. Общий алгоритм выглядит так прошиваем микроконтроллер и отлаживаем свою программу через интерфейс, который реализован в прошивке. Также возможна перепрививка микроконтроллера через этот же интерфейс на мой взгляд в этом есть смысл если интерфейс удаленный, если интерфейс проводной лучше перепрашивать через программатор, а он все равно вам хотя бы один раз да понадобиться. Исходники интерфейса и само ядро отладчика компилируются вместе с программой пользователя.
       Основная идея заключается в создании 2х поточного приложения, каждый поток имеет свой стек, от использования кучи в потоке отладчика я отказался (т.к. это создает дополнительные проблемы, связанные с пересечением указателя конца кучи и текущего указателя на стек из вариантов постоянно переключаться на user thread при выделении памяти или писать дополнительно свою кучу для debugger thread, а главное при возникновении проблем типа stack overflow будет не известно какой поток это сделал, по собственному опыту я проверял на практике данный вариант, лучше просто кучу при написании ядра отладки не использовать) потоки переключаются с помощью таймера. Один поток для отладки, другой основная программа. 

В данной статье я разместил ссылки на git проект, а также видео работы интерфейсов:

Stm32f303 отладка через usb интерфейс:

Site language: