002-GD32L235KBQ6 Keil工程移植J-Link RTT
目录
1.背景
2.移植J-Link RTT
2.1.下载J-Link RTT C代码
2.2.移植RTT代码到Keil工程
2.3.添加实现代码
2.4.实际测试
1.背景
由于当前使用到的UART串口都被占用了,无法单独使用串口工具来打印log,这个时候有两种考虑方式,一个是SWD调试接口的SWO,另外一个就是使用J-Link RTT工具。但是当前EE并没有把SWO调试连接到Connector,所以就只剩下了J-Link RTT。
关于J-Link RTT的资料就不过多赘述了,都可以在网上找到很多介绍。
2.移植J-Link RTT
2.1.下载J-Link RTT C代码
目前J-Link v7版本以及以下版本,RTT参考C代码是在安装目录,这边以J-Link v798e版本为例
D:\Program Files\SEGGER\JLink_V798e\Samples\RTT\SEGGER_RTT_V798e.zip
解压出来如下文件夹所示:

如果是安装的J-Link v8以及以上版本,RTT参考代码默认不在安装目录,RTT部分代码已经在github中维护
https://github.com/SEGGERMicro/RTT

其实发现两种版本的主要目录架构是一样的,所以我们使用最新的J-Link版本来使用
从github下载下来并解压到本地做备份

2.2.移植RTT代码到Keil工程
2.2.1.拷贝代码
在工程中新建一个目录J-Link RTT存放RTT C代码,路径为"J-Link RTT"

将RTT-main\RTT文件夹下面3个文件拷贝到工程目录下的J-Link RTT文件夹

将RTT-main\Config文件夹下面的头文件代码拷贝到工程目录下的J-Link RTT文件夹

2.2.2.添加到工程
将上述新增的C代码,添加到Keil工程中

将对应RTT相关的头文件包含进来

进行编译,发现没有报错
2.3.添加实现代码
在原本重定向的printf函数的fputc中,加入SEGGER_RTT_PutChar函数用于RTT的打印
#include "SEGGER_RTT.h"int fputc(int ch, FILE *f)
{
#if USART_DEBUG_ENABLEusart_data_transmit(USART1, (uint8_t)ch);while (usart_flag_get(USART1, USART_FLAG_TBE) == RESET);
#elseSEGGER_RTT_PutChar(0, ch);
#endifreturn ch;
}
