Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2743
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

5. Введение в отладку

«При написании кода самое главное – его отладка», – сказал один из моих друзей. И это в корне верно. Мы можем сделать все возможное, написав действительно хороший код, но рано или поздно нам приходится иметь дело с программными ошибками (аппаратные ошибки – еще один ужасный зверь, с которым приходится бороться). И хорошая отладка встраиваемого программного обеспечения – то, что нужно для того, чтобы стать счастливым разработчиком встраиваемых систем.

Вданной главе мы начнем анализировать важный инструмент отладки: OpenOCD. Он стал своего рода стандартом в мире разработки встраиваемых систем, и благодаря тому, что многие компании (включая ST) официально поддерживают его разработку, OpenOCD ждет быстрый рост. Каждая новая версия включает поддержку десятков микроконтроллеров и отладочных плат. Более того, будучи переносимым среди трех основных операционных систем (Windows, Linux и Mac OS), он позволяет нам использовать один уникальный и совместимый инструмент для отладки примеров этой книги.

Вданной главе также рассматривается еще один важный механизм отладки: полухостинг ARM (ARM semi-hosting). Это способ передачи запросов ввода/вывода из кода приложения на хост-ПК, на котором работает отладчик, и выполнения чрезвычайно полезных функций, которые были бы слишком сложными (или невозможными из-за отсутствия некоторых аппаратных функций) для выполнения на целевом микроконтроллере.

Данная глава представляет собой предварительный обзор процесса отладки, который требует отдельной книги даже для достаточно простых архитектур, таких как STM32. Глава 24 подробно рассмотрит другие инструменты отладки и сосредоточится на механизме исключений Cortex-M, который является отличительной особенностью данной платформы.

5.1. Начало работы с OpenOCD

Open On-Chip Debugger1 (OpenOCD) начался в качестве дипломной работы Доминика Рата (Dominic Rath) и сейчас активно развивается и поддерживается большим и растущим сообществом при официальной поддержке нескольких производителей интегральных схем.

Целью OpenOCD является обеспечение отладки, внутрисистемного программирования и тестирования методом граничного сканирования для встроенных целевых устройств. Оно осуществляется с помощью аппаратного отладочного адаптера, обеспечивающего правильное электродистанционное управление (electrical signaling) отлаживаемым целевым устройством. В нашем случае этот адаптер является встроенным отладчиком ST-LINK, предоставляемым платой Nucleo2. Каждый отладочный адаптер использует

1http://openocd.org

2Отладчик ST-LINK платы Nucleo спроектирован так, что его можно использовать в качестве автономного адаптера для отладки внешнего устройства (например, платы, разработанной вами для оснащения микроконтроллером STM32).

Введение в отладку

131

транспортный протокол, являющийся посредником между отлаживаемой аппаратурой и программным обеспечением хоста, то есть OpenOCD.

OpenOCD разработан как универсальный инструмент, способный работать с десятками аппаратных отладчиков, использующих несколько транспортных протоколов. Для этого требуется способ конфигурации интерфейса для конкретного отладчика, который реализуется при помощи скриптов. OpenOCD использует расширенное определение Jim-TCL, которое, в свою очередь, является подмножеством языка программирования

TCL.

Рисунок 1: Как OpenOCD взаимодействует с платой Nucleo

На рисунке 1 показана типовая среда отладки для платы Nucleo. Здесь мы имеем аппаратную часть, состоящую из Nucleo со встроенным интерфейсом ST-LINK, и OpenOCD, взаимодействующий с отладчиком ST-LINK при помощи libusb, или любую API-совместимую библиотеку, позволяющую приложениям пользовательского пространства (user-space applications) взаимодействовать с USB-устройствами. OpenOCD также предоставляет необходимые драйверы для взаимодействия с внутренней Flashпамятью STM323 и протоколом ST-LINK. Таким образом, в конфигурационных файлах указывается отладка конкретной аппаратуры (и используемого отладчика).

Как только OpenOCD устанавливает соединение с платой для отладки, он предоставляет два способа связи с разработчиком. Первый – по локальному telnet-соединению через порт 4444. OpenOCD предоставляет удобную оболочку, которая используется для отправки ему команд и получения информации об отлаживаемой плате. Второй вариант предлагается с его использованием в качестве удаленного сервера для GDB (GNU Debugger). OpenOCD также реализует удаленный протокол GDB и используется как «компо- нент-посредник» между GDB и аппаратурой. Это позволяет нам отлаживать микропрограмму с помощью GDB и, что более важно, использовать Eclipse в качестве графической среды отладки.

3 Одно из распространенных заблуждений относительно платформы STM32 состоит в том, что все устройства STM32 имеют общий и стандартизированный способ доступа к своей внутренней Flash-памяти. Это не так, поскольку каждое семейство STM32 имеет определенные возможности по отношению к своим периферийным устройствам, включая внутреннюю Flash-память. Поэтому требуется, чтобы OpenOCD предоставил драйверы для обработки всех устройств STM32.