我正在尝试弄清楚ARM上的semihostong (STM32042)。如果我直接从命令行运行openocd并通过TCP从gdb连接到它,我可以看到printf输出。但是如果我从gdb内部启动openocd,输出就会变成天空中的某个大的/dev/null。
如果我自己启动openocd,
$ openocd -f interface/stlink-v2-1.cfg -f target/stm32f0x.cfg并像这样从gdb连接到它
(gdb) target remote localhost:3333我在opeocd终端中看到了printf输出。但是如果我像this link建议的那样从gdb内部启动openocd,
(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。
发布于 2020-05-17 05:06:39
结果比我想要的要稍微复杂一些。显然,在管道中启动GDB和OpenOCD是不可能的;它们需要通过套接字进行双向通信。因为它需要两个单独的命令调用,并且因为GDB的配置不仅仅是一行程序,所以我将此代码放入了它自己的一个小存储库:
https://github.com/arikrupnik/semihosting-ut
repo包含将stdout路由到控制台的代码,但它做的还不止这些。我在http://www.dish.tc的ARM目标上广泛使用它进行单元测试,并发现它非常有用。我很乐意回答关于它的问题。
https://stackoverflow.com/questions/58126134
复制相似问题