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

Продвинутые методы отладки

695

несколько версий своего отладчика J-Link. Дорогие основаны на FPGA, которая позволяет производить выборку входов/выходов SWD на скорости до 100 МГц. Интегрированный интерфейс ST-LINK со специализированным микропрограммным обеспечением J-Link может производить выборку сигнала SWO до 4500 кГц. J-Link Ultra+ способен производить выборку сигналов до 100 МГц.

Пакет CMSIS-Core для ядер Cortex-M3/4/7 предоставляет необходимую прослойку для обработки протокола SWV. Например, процедура ITM_SendChar() позволяет отправлять символ, используя вывод SWO. В инструментарий GNU MCU Eclipse автоматически интегрируется необходимая логика: если мы установим макрос OS_USE_TRACE_ITM на уровне проекта, мы можем использовать trace_printf() для вывода сообщений через порт SWO.

Чтобы правильно декодировать байты, отправленные через порт SWO, отладчику хоста необходимо знать частоты процессора и порта SWO. Последний пропорционален частоте ядра. Отладчики J-Link обладают методом автоматического определения этих скоростей. Если мы установим оба поля CPU frequ и SWO freq в ноль в конфигурации отладки J-Link (см. рисунок 22), тогда отладчик автоматически получит необходимые скорости, когда начнется сеанс отладки. Однако если наш код изменяет тактовую частоту во время инициализации микроконтроллера вызовом функции SystemClock_Config(), то вычисленная частота больше не будет совпадать. Чтобы решить эту проблему, вы можете указать рабочую частоту процессора в поле CPU frequ и частоту SWO в поле SWO freq. Если вы сомневаетесь в том, какой указать максимальную частоту SWO, то вы можете воспользоваться JLinkSWOViewer, способным вывести правильные значения конфигурации.

Протокол SWV определяет 32 различных стимулирующих порта (stimulus ports): порт является «тегом» в сообщении SWV, используемом для выборочного включения/отключения сообщений. В инструментарии GNU MCU Eclipse можно определить стимулирующий порт путем определения макроса OS_INTEGER_TRACE_ITM_STIMULUS_PORT на уровне проекта. Стимулирующий порт по умолчанию равен 0. Если вы измените стимулирующий порт, то вам нужно будет изменить параметр Port mask в настройках конфигурации J-Link. Обратите внимание, что параметр Port mask соответствует стимулирующему порту SWV плюс один (то есть, если в коде выбран стимулирующий порт 0, то Port mask должен быть равен 0x1 и т. д.).

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

24.5. STM Studio

STM Studio16 – инструмент мониторинга и визуализации переменных во время выполнения для микроконтроллеров STM32. Он разработан и официально поддерживается компанией ST, которая распространяет его бесплатно. Он предназначен для работы с отладчиками STM (ST-LINK, STIce и т. д.). Данный инструмент поддерживает протоколы JTAG и SWD и является ненавязчивым инструментом, позволяющим отслеживать значения переменных во время выполнения микропрограммы. Полученные значения

16 http://www.st.com/en/development-tools/stm-studio-stm32.html

Продвинутые методы отладки

696

затем наносятся на график, и это мощный инструмент, который позволяет понять, что происходит с нашим кодом, не влияя на его выполнение. Это фундаментальный инструмент в ряде критичных ко времени приложений, таких как управление двигателем и т. д. К сожалению, даже при разработке на Java на момент написания данной главы STM Studio поддерживает исключительно ОС Windows, от Windows XP до последней вер-

сии Windows 10.

Рисунок 23: Как импортировать переменные в STM Studio

Использовать STM Studio очень просто. После того, как наш код скомпилирован17 и загружен в целевой микроконтроллер, мы можем запустить STM Studio и импортировать бинарный ELF-файл, перейдя в File → Import variables (или нажав Shift + I). Полный список всех глобальных переменных18 представляется в окне, показаном на рисунке 23. Выберите интересующие вас переменные и нажмите кнопку Import.

Импортированные переменные отображаются во вкладке Display variables. Вы можете импортировать на текущий график те, которые вам нужно проверить, просто перетащив их на график. У вас может быть несколько графиков в одном сеансе, так что вы можете анализировать переменные отдельно, как показано на рисунке 24.

17Важно, чтобы бинарный образ был скомпилирован со всеми включенными отладочными символами.

18Очевидно, что невозможно проверить локальные переменные, потому что они выделены в текущем кадре стека. Если вам нужно отслеживать локальные переменные, вы можете преобразовать их в глобальные.

Продвинутые методы отладки

697

Рисунок 24: Как строятся на графике переменные в STM Studio

Прочитайте внимательно

Часто текущий график находится за пределами правильного диапазона значений оси, и вы не увидите значения переменных. Достаточно просто заставить STM Studio автоматически масштабировать ось, щелкнув правой кнопкой мыши по графику и выбрав меню Auto Range → Both.

STM Studio предоставляет множество настроек. Для получения дополнительной информации обратитесь к официальному руководству19.

24.6. Одновременная отладка двух плат Nucleo

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

Для запуска двух экземпляров OpenOCD нам необходимо получить основополагающую информацию: серийный идентификатор интерфейса ST-LINK, который соответствует идентификатору ЦПУ STM32F1 в отладчике ST-LINK.

Получение серийного идентификатора ST-LINK в Linux и MacOS

Чтобы получить серийный идентификатор ST-LINK, мы можем использовать инструмент обновления ST-LINK, доступный на веб-сайте ST20 (вы должны были уже загрузить его, если следовали инструкциям по установке в Главе 2). Извлеките zip-архив (stswlink007.zip) и перейдите во вложенный каталог AllPlatforms.

19https://my.st.com/content/ccc/resource/technical/document/user_manual/b0/e4/5c/2e/5c/a3/49/c7/CD00291015.p df/files/CD00291015.pdf/jcr:content/translations/en.CD00291015.pdf

20 http://www.st.com/web/en/catalog/tools/PF260217

Продвинутые методы отладки

698

Запустите инструмент обновления, дважды щелкнув по файлу STLinkUpgrade.jar и запомните серийный идентификатор ST-Link ID, появляющийся при нажатии на кнопку

Refresh device list (см. рисунок 25).

Рисунок 25: Как получить серийный идентификатор ST-LINK в Linux и MacOS

Теперь мы готовы изменить конфигурацию внешнего инструмента в Eclipse, добавив следующие параметры в поле Arguments (см. рисунок 26):

-f board/board.cfg -c "hla_serial 066FFF575056805087053651; ocd_gdb_port 3334; telnet_port 5554; tcl_port 6664"

где board.cfg – файл конфигурации, соответствующий вашей плате; ocd_gdb_port – порт GDB (который по умолчанию равен 3333); telnet_port – порт telnet (по умолчанию он равен 5555); tcl_port – это порт JimTCL (по умолчанию он равен 6666). Очевидно, что если у вас два экземпляра OpenOCD, запущенные на одном ПК, то вам нужно указать разные порты TCP. Более того, вам нужно изменить номер удаленного целевого порта Remote target port number в конфигурации отладки проекта (см. рисунок 8 в Главе 2), указав тот же номер порта, что указан в параметре ocd_gdb_port.

Рисунок 26: Как заполнять поля External Tools Configurations при одновременном использовании двух ST-LINK