Использование openOCD для извлечения следов ETB на Cortex-M (STM32F4) - PullRequest
2 голосов
/ 30 апреля 2020

STM32F4 обнаружение (Cortex-M4) имеет ETB, буфер, хранящий следы команд. Как я могу использовать OpenOCD и встроенный отладчик st-link для извлечения следов из ETB?

Я немного запутался между SWO / SWD. Что я должен использовать? Кроме того, мне нужно дополнительное оборудование для извлечения следов?

Спасибо

1 Ответ

2 голосов
/ 01 мая 2020

Боюсь, я никогда не слышал о STM32F4 , включая Embedded Trace Buffer (ETB) в реализованном подмножестве ядра ARM и его Возможности CoreSight . Я думаю, это потому, что ETB является дополнительной функцией, и ST решил не настраивать / не реализовывать эту опцию ETB в своих контроллерах STM32F4 и ядре ARM, которое они встраивают.

Я посмотрел программирование / справочные руководства и таблица данных представителя высшего уровня семейства STM32F4xx, и я не нашел ничего о ETB, что, кажется, подтверждает это предположение.


Теперь ETB - не единственный вариант если кто-то хочет передавать данные трассировки из своего MCU:

  • Все контроллеры STM32F4 имеют макрос отслеживания инструкций (ITM) , который может альтернативно доставлять программно-определенный поток вывода символов или снимки значений данных или счетчик программы, которые собираются либо на ваших точках останова, либо просто периодически, с помощью блока Data Watchpoint / Trace (DWT) . Вы можете использовать ITM

    • для инструментов приложения с выводом символов (printf())
    • для профилирования вашего приложения
    • для проверки определенных свойств / потоков состояний Ваше программное обеспечение путем отслеживания программных точек останова или точек наблюдения данных

    ITM можно использовать через вывод SWO , используя любое оборудование адаптера, например, любую версию ST-Link, j-Link, uLink - * et c. Это правильный интерфейс трассировки, поскольку он работает без остановки процессора в точках останова, поэтому проверка не нарушит свойства вашей системы в режиме реального времени.

  • Многие контроллеры STM32F4 (AFAIK, те, у которых> = 100 пинов) включает в себя макроячейку Embedded Trace (ETM) , которая может отслеживать программный счетчик (P C) и данные каждый цикл ЦП, так что вы можете использовать это один для отслеживания всего потока управления (и потока данных) вашего контроллера, также не останавливая его на какой-либо точке останова.

    Огромное количество данных для отслеживания (убедитесь, что у вас есть свободный порт USB3 ... ) может доставляться только полезным способом через интерфейс синхронного порта вокруг группы GPIOE (альтернативные функции TRACECLK + TRACED0 / 1/2/3 => всего 5 контактов), который подключен к блоку интерфейса * Trace Port Interface (TPIU) рядом с ETM.

    Чтобы использовать эту технологию, вам нужны более дорогие варианты адаптеров отладки, такие как j-Trace, uLink-Pro или Lauterbach. Самый дешевый адаптер с поддержкой ETM, о котором я знаю (но еще не использовал его), это QTrace by PDQlogi c, начиная с £ 379. Остальные доступны примерно за 1-4 k £ / k € / k $.


То, как звучит ваш вопрос, говорит мне о том, что вы, вероятно, только что начали программировать на STM32. Поэтому я рекомендую вам приобрести плату для разработки со встроенным ST-Link внутри. Это самое дешевое решение (сначала выполняется отладка SWD, а затем - трассировка SWO). В блоге Atolli c есть хорошее введение, как это сделать быстро.

...