一直以来,我都用的是openocd + vscode来开发stm32,相比传统的KEIL MDK,VSCode无论是各种插件(Copilot!)还是人性化方面都更胜一筹。用习惯之后,不论是Python还是Rust还是C,所有的语言都在一个地方开发,真的很爽。在开发stm32的时候,由于引入了RTOS,所以仅仅是断点单步调试显得有些不够用了,就想着可不可以像其他高级语言一样,电脑端命令行中实时打印日志。几番搜索下来,发现VSCode上面的这套开源工具链(OpenOCD + CortexDebug)已经把这个事情做了!先展示一下效果:
单步调试 + 彩色日志,直接IDE内命令行展示,全齐,且不需要额外硬件,一个stlink足够。真的很方便。下面就简单介绍一下如何实现。
安装RTT
首先是要从SEGGER网站上面下载JLink全家桶,并且把RTT相关代码复制到工程下面,在makefile中添加对应的文件。参见:https://zhuanlan.zhihu.com/p/163771273 这篇文章。其中,如果你要使用stlink,那么环境变量也不用配置,只需要复制RTT源码即可。然后,添加log文件,同样是从上面的文章中复制得到,感谢文章作者:
|
|
配置Cortex-Debug
OpenOCD原生是支持RTT的,在默认情况下需要去修改openocd.cfg
来配置RTT。不过在VSCode里面,Cortex-Debug插件已经帮你配置好了一切(当然底层还是使用的OpenOCD的能力)!本来Cortex-Debug也是在VSCode下调试stm32必装的软件,所以说我们实际上只需要改改配置就可以使用RTT了。
具体Cortex-Debug的配置可以参见我之前的文章:https://haobogu.github.io/posts/keyboard/openocd-ospi-flash/ 中的launch.json
配置环节。
在这里,我们只需要在原本的launch.json
中,增加如下配置:
然后,按F5烧录代码并启动调试。你就会在下面的终端页面上看到新增了一个窗口:
这里就是RTT日志显示的地方。这样,不管是单步调试还是彩色日志显示,在一个地方全齐。Cortex-Debug甚至还支持RTT的其他特性,比如Graph:
更多的使用方法,可以参考Cortex-Debug的WIKI:https://github.com/Marus/cortex-debug/wiki/SEGGER-RTT-support