enocd和gdb在STM32L4芯片上通过半主机获取额外的字节

enocd和gdb在STM32L4芯片上通过半主机获取额外的字节

本文介绍了使用openocd和gdb在STM32L4芯片上通过半主机获取额外的字节的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用带有openocd版本0.10.0+dev-00512-gfd044600gdb-multiarch的SWO引脚获得一些调试输出.

I try to get some debug output using the SWO pin with openocd version 0.10.0+dev-00512-gfd044600 and gdb-multiarch.

我用带有标志--specs=nosys.specs --specs=nano.specs --specs=rdimon.specsARMToolchain_8-2018-q4编译了固件,并将函数调用initialise_monitor_handles();放在main()中.我的.gdbinit看起来像这样:

I compiled the firmware with the ARMToolchain_8-2018-q4 with the flags --specs=nosys.specs --specs=nano.specs --specs=rdimon.specs, put the function call initialise_monitor_handles(); in the main(). My .gdbinit looks like that:

target extended-remote localhost:3333
monitor reset halt
monitor arm semihosting enable
monitor tpiu config internal ../bin/swo.log
load
break main

我像这样在_putchar()函数中安装了对ITM_SendChar()的调用:

I installed the call to ITM_SendChar() in the _putchar() function like that:

void _putchar(char c) { ITM_SendChar(c) };

芯片为STM32L432KC,openocd命令为:

The chip is STM32L432KC and the openocd command is:

openocd -f board/stm32l4discovery.cfg

当我打印"Test \ r \ n"字符串时,在swo.log文件中(从xxd -b swo.log输出的)我得到了一些额外的字符:

When I print "Test\r\n" string I get some extra characters in the swo.log file (output from xxd -b swo.log):

000032e8: 00000001 01010100 00000001 01100101 00000001 01110011  .T.e.s
000032ee: 00000001 01110100 00000001 00001101 00000001 00001010  .t....

字符串"Test \ r \ n"在那里,但有一些多余的垃圾.我该如何摆脱呢?

The string "Test\r\n" is there but with some extra rubbish. How can I get rid of that?

我现在的解决方法是使用以下方法剪切不可打印的字符:

My workaround now is to cut the nonprintable characters with:

tail -f ../bin/swo.log | tr -cd '\11\12\15\40-\176'

推荐答案

ITM通道可以处理8位,16位和32位数据.

ITM channel can handle 8-, 16- and 32-bit data.

ITM_SendChar()使用8位(1字节)流,因此每隔一个字节就有1作为后续数据部分的长度.

ITM_SendChar() uses 8-bit (1-byte) stream so you have 1 in every other byte as length of subsequent data portion.

对于swo.log解码,可以使用这篇文章中的perl脚本.

For swo.log decoding one can use perl script from this post.

这篇关于使用openocd和gdb在STM32L4芯片上通过半主机获取额外的字节的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-22 19:24