什么是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连接成功 R0 Y; F( k* M(7)在工程中main函数的while循环中加 SEGGER_RTT_printf(0, "hello, rtt \n"); 构建工程,Download and Debug调试,全速执行,输出如图所示,成功使用J-Link RTT打印数据。 图9:RTT数据传输 SEGGER RTT可与任何J-Link和支持后台内存访问的受支持目标处理器一起使用,可以从目标处理器输出信息,并以非常高的速度将输入发送到应用程序,而不会影响目标的实时行为。 4 k0 k5 g7 o& A; x7 K |
【经验分享】HRTIMER 多种 Fault 事件联动机制
Windows+VS Code+EIDE+STM32+gcc编程环境搭建
基于STM3的开发环境搭建经验分享
基于STM32上NanoEdgeAIStudio经验分享
基于STM32的快速傅里叶变换经验分享
基于STM32的硬件和软件IIC区别经验分享
基于STM3利用GPIO翻转模拟串口进行重定向经验分享
基于STM32中GPIO四种模式经验分享
基于STM32利用傅里叶反变换进行数字滤波经验分享
基于STM32用机器学习实现心率异常检测经验分享