硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1574|回复: 3
收起左侧

[其它] 【原创】使用VSCode + RTT方便地调试STM32

[复制链接]

2

主题

20

回帖

26

积分

新手上路

积分
26
发表于 2023-4-8 23:19:20 | 显示全部楼层 |阅读模式
一直以来,我都用的是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文件,同样是从上面的文章中复制得到,感谢文章作者:
/*
* Author: Jayant Tang
* Email: jayant97@foxmail.com
*/
​
#ifndef _LOG_H_
#define _LOH_H_
#include "SEGGER_RTT.h"
​
#define LOG_DEBUG 1
​
#if LOG_DEBUG
​
​
#define LOG_PROTO(type,color,format,...)            \
        SEGGER_RTT_printf(0,"  %s%s"format"\r\n%s", \
                          color,                    \
                          type,                     \
                          ##__VA_ARGS__,            \
                          RTT_CTRL_RESET)
​
/* 清屏*/
#define LOG_CLEAR() SEGGER_RTT_WriteString(0, "  "RTT_CTRL_CLEAR)
​
/* 无颜色日志输出 */
#define LOG(format,...) LOG_PROTO("","",format,##__VA_ARGS__)
​
/* 有颜色格式日志输出 */
#define LOGI(format,...) LOG_PROTO("INFO: ", RTT_CTRL_TEXT_BRIGHT_GREEN , format, ##__VA_ARGS__)
#define LOGW(format,...) LOG_PROTO("WARN: ", RTT_CTRL_TEXT_BRIGHT_YELLOW, format, ##__VA_ARGS__)
#define LOGE(format,...) LOG_PROTO("ERROR: ", RTT_CTRL_TEXT_BRIGHT_RED   , format, ##__VA_ARGS__)
​
#else
#define LOG_CLEAR()
#define LOG
#define LOGI
#define LOGW
#define LOGE
​
#endif
​
#endif // !_LOG_H_配置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
原文链接(我自己的blog):https://haobogu.github.io/posts/keyboard/rtt/



评分

参与人数 1金币 +50 收起 理由
eric2013 + 50 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107144
QQ
发表于 2023-4-9 03:03:13 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

74

主题

1203

回帖

1425

积分

至尊会员

积分
1425
发表于 2023-4-9 11:56:50 | 显示全部楼层
这个真不错!!!
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-6-25 10:59:44 | 显示全部楼层
​
#ifndef _LOG_H_
#define _LOH_H_
#include "SEGGER_RTT.h"
这里的“#define _LOH_H_”改成“#define _LOG_H_”吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 10:55 , Processed in 0.269083 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表