Протокол STM32 SWD - номер порта

Я начинаю использовать функцию SWD на своей плате обнаружения STM32. Я перенаправляю вывод трассировки openocd в текстовый файл (потому что я не нашел хорошего монитора SWD для Linux). Я не знаю, почему я получаю два символа, когда отправляю только один.

В моем выходном файле каждому символу предшествует другой код ASCII (в основном не печатаемый). Этот предыдущий код является постоянным из-за порта. Например:

Port 0:
0x01 [Character] 0x01 [Character] etc.
Port 1:
0x09 [Character] 0x09 [Character] etc.
Port 2:
0x11 [Character] 0x11 [Character] etc.
Port 3:
0x19 [Character] 0x19 [Character] etc.

Я нашел в коде github, который использует формулу [предшествующий код] >> 3 для получения номера порта. Это работает.

Я использую утилиту CubeMX & HAL вот так:

ITM->PORT[portNum].u8 = (uint8_t)ch; 

отправить символ "ch".

Почему мне нужно использовать байтовые операции? В этом предыдущем коде есть другая информация, кроме номера порта? Я стараюсь финансировать это в документации, но в каждом примере используется монитор ST.

Я пойму, что именно предшествует коду в SWD?


person JhnW    schedule 02.02.2019    source источник
comment
Почему мне нужно использовать операцию прикуса что такое операция прикуса?   -  person 0___________    schedule 03.02.2019
comment
Я имею в виду побитовые операции в C, например, оператор ›› для битового сдвига.   -  person JhnW    schedule 03.02.2019


Ответы (1)


Взгляните на мой ответ здесь: https://stackoverflow.com/a/57014035/6552613

Вы видите кадрирование, которое позволяет мультиплексировать данные из нескольких портов ITM в поток байтов на выводе SWO.

Если вы хотите точно знать, как построено кадрирование, прочтите главу «Макроячейка инструментальной трассировки» в документе ARM DDI0314.

person nattgris    schedule 12.07.2019