Jlink RTT工具打印日志

背景

平常调试代码中使用串口打印log,往往需要接出串口引脚,比较麻烦,并且串口打印速度较慢,串口的中断可能会影响代码的执行效率。
SEGGER RTT支持使用J-link调试器输出来自目标微控制器的信息,也可以接收输入,并且在高速度交互的同时不会影响目标处理器的实时性,可以省掉平常打印日志用的串口。

Jlink RTT简介

RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。

RTT既可以从MCU上输出信息、也可以向应用程序发送信息,由于其高速的特性,所以不影响MCU的实时性。

实现原理: 固件代码将要输出的log数据按照RTT的格式写到确定地址的内存中去,然后RTT通过swd口读取对应内存地址的数据,并显示到PC终端上。

Jlink RTT 代码获取

RTT工具的源码实现提供了完整的功能,可以自由使用。RTT的源码是作为J-Link软件包的一部分,在Jlink安装目录中的 Sample/RTT中。将RTT目录中的这四个文件移植到MCU工程中,并在添加相关路径和头文件。

安装路径\SEGGER\JLink\Samples\RTT

本文都将以JLink v7.92版本为例 JLink安装目录在 C:\Program Files\SEGGER\JLink RTT
支持库文件在 C:\Program Files\SEGGER\JLink\Samples\RTT\SEGGER_RTT_V792.zip

然后解压 SEGGER_RTT_V792.zip 文件之后,从文件中获取如下四个.h和.c文件:
Jlink RTT工具打印日志_第1张图片

移植RTT代码

移植代码到工程中,包含对应的.c文件和头文件路径。
加入测试函数SEGGER_RTT_printf,参数1通道设置为0, 其他参数用法和printf类似。建议在定时函数中加入以下测试代码,编译,下载到MCU中。
注意:不要直接放到while(1)里面,否则可能因为循环过快导致log无法输出。

SEGGER_RTT_printf(0, “Hello world RTT %d\r\n”, n);

连接RTT VIEW

使用Jlink commander的 connect命令将Jlink与板子连接,详情可见文档上面介绍Jlink commander的文档。

在计算机中搜索JLINK RTT,并打开RTT VIEW终端
Jlink RTT工具打印日志_第2张图片

连接设备,选择设备类型和RTT地址。该设备是CORTEX-M3的内核,SWD连接方式, 速率可自行设置,建议设置高一些。
在很多设备上RTT地址是可以自动是被到的,对于富芮坤这样不能自动识别的设备,需要自行输入RTT地址,RTT地址即为代码中结构体_SEGGER_RTT的地址,可在代码中自行打印,也可在生成的map文件中获取, map文件中地址中查找如下图。
Jlink RTT工具打印日志_第3张图片

Jlink RTT工具打印日志_第4张图片
输入地址后,即可在RTT VIEW终端中,查看打印的RTT log信息了。
Jlink RTT工具打印日志_第5张图片

你可能感兴趣的:(SEGEER,硬件工程)