首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用openocd显示Cortex-M4 SWO日志

使用openocd显示Cortex-M4 SWO日志
EN

Stack Overflow用户
提问于 2018-04-28 17:39:23
回答 3查看 2K关注 0票数 2

我正在使用ubuntu,openocd和stlink开发stm32f407-discovery,我正在学习通过SWO引脚使用ITM模块从芯片获取日志。最后,我发现openocd命令

代码语言:javascript
复制
tpiu config internal /tmp/swo.out uart off 168000000

从临时文件中获取日志是完美的,但是有没有办法直接在openocd控制台上显示日志,就像半托管日志一样。谢谢

EN

回答 3

Stack Overflow用户

发布于 2020-03-20 18:09:59

实际上,你离实现理想的结果已经很近了。首先你不必指定输出流,默认的是在openocd的控制台.What上公开的命名管道,我的意思是你可以简单地修改:

代码语言:javascript
复制
tpiu config internal /tmp/swo.out uart off 168000000

通过以下方式:

代码语言:javascript
复制
tpiu config internal - uart off 168000000

尽管接下来出现的问题是您需要一个解析器来读取swo原始字节,但幸运的是,有一个非常未知但非常有用的存储库,它只需要一个python脚本就可以做到这一点:swo_parser

因此,当我从jtag调试f1时(因为uart被其他用途占用),总结一下我的配置是:

  1. 在第一个终端上打开两个终端
  2. 第二个终端运行python3 swo_parser.py

debug.cfg只包含:

代码语言:javascript
复制
source [find interface/stlink-v2.cfg]
source [find target/stm32f1x.cfg]
init
tpiu config internal - uart off 72000000
itm ports on

另外,我忘了提到,您必须像这样的ITM_SEND_CHAR definition来创建一个_write函数

票数 2
EN

Stack Overflow用户

发布于 2020-03-03 16:45:57

我使用Orbuculum作为辅助程序使其正常工作。

为了让输出在与GDB相同的终端中可见,并轻松地同时启动所有内容,我像这样启动GDB:

代码语言:javascript
复制
arm-none-eabi-gdb \
       -iex 'target extended | openocd -f interface/stlink.cfg -f target/stm32f3x.cfg -c "gdb_port pipe"' \
       -iex 'mon halt' \
       -iex 'mon tpiu config internal swo.log uart false 2000000' \
       -iex 'shell bash -m -c "orbuculum -f swo.log &"' \
       -iex 'shell bash -m -c "orbcat -c 0,%c &"' \
       firmware.elf

-iex参数告诉gdb在启动时立即执行命令。下面是这些命令的作用:

  1. target extended ...启动program.
  2. mon tpiu ...并使用管道在它与file.
  3. shell bash -m "orbuculum ...之间通信,告诉openocd停止任何正在执行的OpenOCD,配置OpenOCD以接收跟踪输出并将其写入swo.log,OpenOCD启动Orbuculum服务器并告诉它从swo.log读取。&让它在后台运行,而bash -m在单独的进程组中运行它,这样GDB中的ctrl-c就不会意外地停止,并启动Orbuculum工具从ITM端口0读取任何输出,并将其作为字符写入终端。

下面是它看起来的样子:

代码语言:javascript
复制
GNU gdb (GNU Tools for Arm Embedded Processors 8-2018-q4-major) 8.2.50.20181213-git
....
Reading symbols from firmware.elf...
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: firmware.elf 
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x0800011c msp: 0x10001000
Boot
ADC ch 1 val -100
ADC ch 3 val 0
ADC ch 4 val 3
ADC ch 1 val 4091
.....

Orbuculum套件中还有其他有用的工具。例如,orbtop -e firmware.elf显示了正在花费执行时间的位置。

票数 1
EN

Stack Overflow用户

发布于 2018-11-28 19:47:16

在搜索了几天之后,我没有直接在控制台中找到任何关于openocd打印的东西。

您可以做的是将其重定向到UART (需要更多的硬件来设置),并使用另一个程序(如st link实用程序)来查看输出,但是在您的终端中执行"cat /tmp/swo.out“要容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50075076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档