如何在IAR中使用J-Link RTT打印数据?

浏览:834来源:本站时间:2021-04-02

什么是RTT?

RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术,它结合了SWO和半主机的优点,具有极高的性能。

使用RTT可以从MCU非常快速输出调试信息和数据,且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU,兼容性强。

RTT支持两个方向的多个通道,上到主机,下到目标,它可以用于不同的目的,为用户提供尽可能多的使用方式。默认实现每个方向使用一个通道,用于可打印终端输入和输出。

使用J-Link RTT Viewer,可用于“虚拟”终端,允许打印到多个窗口(例如:一个用于标准输出,一个对于错误输出,一个用于调试输出)。


图1:J-Link RTT


RTT的工作原理

RTT在MCU的存储器中使用SEGGER RTT控制块结构管理数据读写。该控制块包含一个ID,以使其可以通过连接的J-Link在内存中找到control block,并且为每个可用通道提供一个环形缓冲区结构,描述通道缓冲区及其状态。

可用信道的最大数目可以在编译时配置,并且每个缓冲区都可以在MCU运行时配置和使用。上下缓冲区可以分开处理。每个通道都可以配置为阻塞或非阻塞。

在阻塞模式下,应用程序将等待缓冲区写满,直到可以写入所有内存为止,这将导致应用程序处于阻塞状态,但可以防止数据丢失。

在非阻塞模式下,只会写入适合缓冲区的数据,或完全不写入缓冲区,其余的数据将被丢弃。这样即使没有连接调试器,也可以实时运行。开发人员不必创建特殊的调试版本,并且代码可以保留在发布应用程序中。


图2:RTT工作原理图


RTT的性能

SEGGER RTT的性能明显高于其他任何用于将数据输出到主机PC的方式。平均一行文本可以在1微秒或更短的时间内输出。基本上相当于做一个memcopy()的时间。


图3:RTT,SWO,Semihosting的性能对比图


如何使用RTT

相关工具:

1、IAR EWARM 8.50.9

2、J-Link V6.92驱动包

3、STM32F411RE

(1)首先下载Segger的J-Link的驱动包https://www.segger.com/downloads/jlink/JLink_Windows.exe,下载之后完成安装。

(2)完成安装之后,根据你安装时的路径,找到J-Link驱动包的安装位置,找到如下路径SEGGER\JLink_V692\Samples\RTT,解压路径里的SEGGER_RTT_V692.zip,不同版本的驱动包V后面的数字不同。


图4:RTT代码

(3)将解压后的文件夹拷贝到所在工程目录

(4)在IAR EWARM项目工程中,创建RTT Group,将SEGGER_RTT_V692\RTT目录下的SEGGER_RTT.c和SEGGER_RTT_printf.c添加到RTT中,添加include路径SEGGER_RTT_V692\RTT。


图5:添加文件


图6:添加include路径


(5)工程加入文件后,在想使用RTT的文件添加 #include “SEGGER_RTT.h” ,就可以调用SEGGER_RTT_printf()。SEGGER_RTT_printf(0,”hello world!”); 的语法格式与C语言中printf类似,只不过在前面加了个参数0,表示0通道。

(6)在开始菜单→SEGGER J-Link V6.92→J-Link RTT Viewer,打开之后,选择USB连接J-Link,选择你的芯片型号,这里选择STM32F411RE,接口、接口速度和RTT控制块默认即可。


图7:连接J-Link RTT Viewer


确保RTT Viewer连接上,连接成功后,在下面的log框中,会有如下显示。


图8:J-Link RTT Viewer连接成功


(7)在工程中main函数的while循环中加  SEGGER_RTT_printf(0, "hello, rtt \n"); 构建工程,Download and Debug调试,全速执行,输出如图所示,成功使用J-Link RTT打印数据。


图9:RTT数据传输


SEGGER RTT可与任何J-Link和支持后台内存访问的受支持目标处理器一起使用,可以从目标处理器输出信息,并以非常高的速度将输入发送到应用程序,而不会影响目标的实时行为。




京ICP备:京ICP备05011254号-1 版权归北京麦克泰软件技术有限公司所有
北京麦克泰软件技术有限公司