6

我正在尝试找出 ARM(STM32042)上的半主机。如果我直接从命令行运行并通过 TCP连接到它,我可以看到printf输出。但是,如果我从内部启动,输出会转到天空中的某个大 /dev/null 。openocdgdbopenocdgdb

如果我启动openocd自己

$ openocd -f interface/stlink-v2-1.cfg -f target/stm32f0x.cfg

gdb并像这样连接到它

(gdb) target remote localhost:3333

printf我在opeocd终端中看到了输出。但是,如果我按照此链接的建议openocd从内部启动,gdb

(gdb) target remote | openocd -f interface/stlink-v2-1.cfg -f target/stm32f0x.cfg -c "gdb_port pipe"

我看到所有openocd调试消息(例如,xPSR: 0xc1000000 pc: 0x08001648 msp: 0x20001800, semihosting),但没有看到我printf的 s。

4

1 回答 1

0

结果比我想要的要复杂一些。显然,在管道中启动 GDB 和 OpenOCD 是不可能的;他们需要通过套接字进行双向通信。因为它需要两个单独的命令调用,并且因为 GDB 的配置不仅仅是单行的,所以我把它放到了它自己的一个小存储库中:

https://github.com/arikrupnik/semihosting-ut

该 repo 包含将 stdout 路由到控制台的代码,但它的功能不止于此。我一直在广泛使用它来对http://www.dish.tc的 ARM 目标进行单元测试,并且发现它非常有用。我很乐意回答有关它的问题。

于 2020-05-16T21:06:39.257 回答