JLink的RTT使用

article/2025/8/26 22:36:17

前言:什么是RTT?

RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。RTT既可以从MCU上输出信息、也可以向应用程序发送信息,由于其高速的特性,所以不影响MCU的实时性。

  • 使用RTT可以从MCU非常快速输出调试信息和数据,且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU,兼容性强。
  • RTT支持两个方向的多个通道,上到主机,下到目标,它可以用于不同的目的,为用户提供尽可能多的自由。默认实现每个方向使用一个通道,用于可打印终端输入和输出。
  • 使用J-Link RTT Viewer,可用于“虚拟”终端,允许打印到多个窗口(例如,一个用于标准输出,一个对于错误输出,一个用于调试输出)。
    在这里插入图片描述

RTT的工作原理

  • RTT在MCU的存储器中使用SEGGER RTT控制块结构管理数据读写。控制块对于每个可用的信道都在内存中包含了一个ID,通过J-Link或者环形缓冲结构区(链表)都可以通过ID找到对应的控制块。
  • 可用信道的最大数目可以在编译时配置,并且每个缓冲区都可以在MCU运行时配置和使用。上下缓冲区可以分开处理。每个通道都可以配置为阻塞或非阻塞。
  • 在阻塞模式下,应用程序将等待缓冲区写满,直到可以写入所有内存为止,这将导致应用程序处于阻塞状态,但可以防止数据丢失。
  • 在非阻塞模式下,只会写入适合缓冲区的数据,或完全不写入缓冲区,其余的数据将被丢弃。这样即使没有连接调试器,也可以实时运行。开发人员不必创建特殊的调试版本,并且代码可以保留在发布应用程序中。

RTT的性能

RTT的性能明显高于其他任何用于将数据输出到主机PC的方式。平均一行文本可以在1微秒或更短的时间内输出。基本上相当于做一个memcopy()的时间。
RTT实现代码使用大约500字节的ROM和(n(通道数) * (24字节ID+24字节))的RAM。推荐的大小是1 kByte(上行信道)和16到32字节(下行信道),这取决于输入/输出的负载。

在这里插入图片描述

官方手册链接

1.移植RTT

RTT源码包在安装的JLINK驱动的目录里面。
在这里插入图片描述
解压后将RTT文件夹复制到我们的工程文件中。
在这里插入图片描述在这里插入图片描述
在工程项目中新建一个RTT分组,并将RTT文件夹中的两个.c文件添加进来,并添加RTT的头文件路径。
在这里插入图片描述在这里插入图片描述
到这里基本就移植成功了。

2.RTT打印输出

在这里插入图片描述编译下载后打开RTT Viewer软件并配置后即可看到输出信息。
在这里插入图片描述在这里插入图片描述

3.小技巧

1)、RTT缓冲大小

有时候我们的信息不能完全的打印出来,可能是因为缓冲不够,默认缓冲区大小事1K字节,如果不够可以改大一点。修改SEGGER_RTT_Conf.h文件中的#define BUFFER_SIZE_UP的值。
在这里插入图片描述

2、多虚拟端口使用

RTT支持向不同的虚拟端口中打印信息,使用方法如下。

首先在RTT Viewer软件中分别打开三个虚拟端口:

在这里插入图片描述
编写代码后编译下载。

SEGGER_RTT_SetTerminal(0);
SEGGER_RTT_printf(0,"RTT test 0!\r\n");SEGGER_RTT_SetTerminal(1);
SEGGER_RTT_printf(0,"RTT test 1!\r\n");SEGGER_RTT_SetTerminal(2);
SEGGER_RTT_printf(0,"RTT test 2!\r\n");

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
3、修改打印字符颜色

RTT支持不同颜色的字符显示,在字符串前面加上对应颜色的宏定义就可以修改字符的颜色。

SEGGER_RTT_SetTerminal(0);
SEGGER_RTT_printf(0,RTT_CTRL_TEXT_RED"RTT test 0!\r\n");	SEGGER_RTT_SetTerminal(1);
SEGGER_RTT_printf(0,RTT_CTRL_TEXT_GREEN"RTT test 1!\r\n");SEGGER_RTT_SetTerminal(2);
SEGGER_RTT_printf(0,RTT_CTRL_TEXT_YELLOW"RTT test 2!\r\n");HAL_Delay(500);

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述4、使用printf重定向

项目中使用printf的地方非常多,如果可以直接修改printf重定向到RTT组件,则会非常方便。使用的方法是直接使用RTT提供的API实现fputc。

#include "stdio.h"//重定义fputc函数 
int fputc(int ch, FILE *f)
{  SEGGER_RTT_PutChar(0, ch);return ch;
}

在这里插入图片描述在这里插入图片描述

#include "stdio.h"printf("RTT test 0!\r\n");
HAL_Delay(500);

在这里插入图片描述5、函数的使用
1)、void SEGGER_RTT_Init (void) RTT初始化函数,应放于程序开始阶段。

2)、int SEGGER_RTT_GetKey (void); 从RTT终端获取一个按键字符。

Reture ValueMeaning
>= 0返回按键字符(0-255)
< 0缓存区中没有有效的字符

示例代码:

    int c;c = SEGGER_RTT_GetKey();if (c == 'q') {exit();}

3)、int SEGGER_RTT_HasKey (void);检测缓存区中是否还有字符。

Reture ValueMeaning
1缓存区中至少有一个字符是有效的
< 0缓存区中没有有效的字符

示例代码:

   if (SEGGER_RTT_HasKey()) {int c = SEGGER_RTT_GetKey();}

4)、int SEGGER_RTT_printf (unsigned BufferIndex, const char * sFormat, …)格式化输出字符串

Reture ValueMeaning
>=0已经发送的字符数
< 0发生错误

http://chatgpt.dhexx.cn/article/OeGDdXXu.shtml

相关文章

使用RTT代替UART,把你的JLink变成串口调试助手~

摘要&#xff1a;不知道大家在单片机开发中是如何打印调试信息的&#xff0c;大多数应该是用串口调试打印吧&#xff0c;在大多数的情况下&#xff0c;一般在制板和写代码时都会预留串口1做为调试打印用。 但是在实际开发如果没有预留串口怎么办&#xff1f;其实我们的下载器是…

TCP RTT与TCP RTO关系详解

本文目录 1&#xff0c;TCP的RTT和TCP的RTO的定义1.1&#xff0c;什么是TCP的RTT1.2&#xff0c;什么是TCP的RTO 2&#xff0c;TCP的当前RTT和RTO的计算2.1&#xff0c;开始讲RTT计算算法前&#xff0c;我们先理解一下TCP里对RTT进行采样的流程2.2&#xff0c;最初始的TCP RTT和…

通过pylink给jlink-RTT添加时间戳

参考链接 目前还有一些bug&#xff0c;比如时间戳有时候会加在一行log的中间&#xff0c;有时候又会少一些时间戳&#xff0c;但是log目前没发现出现问题 在使用pylink时&#xff0c;需要用到Jlink的dll库&#xff0c;需要将D:\SEGGER\JLink_V766d文件夹下的JLink_x64.dll和JLi…

J-Link RTT 支持浮点数

RTT的使用 略 添加浮点数功能 注&#xff1a; 如下代码暂时不支持数据左补零&#xff0c;正浮点数前面显示等功能&#xff1b;不指定位宽时按实际位宽显示&#xff0c;不指定小数位数时按2位小数显示。 在SEGGER_RTT_printf.c文件的SEGGER_RTT_vprintf()函数中&#xff0c;添…

RTT Studio和Cubemx联合开发

1. RTT studio创建工程 创建工程 ## 创建完成以后的目录结构 2. 配置CubuMx 双击cubumx的图标打开CubeMx 配置时钟 生成代码 构建后的代码结构 编译代码满屏错误&#xff1a;不要慌 3. 新增脚本 新建scons脚本文件 SConscript 脚本内容如下&#xff0c;每次修改外…

STM32 RTT

1、安装包 如果安装过jlink&#xff0c;可以用evething来搜索“SEGGER_RTT”&#xff0c;选择“压缩文件”。 压缩文件中的RTT文件夹加入到项目当中 2、项目修改 3、使用 3.1 普通使用 SEGGER_RTT_printf(0, "Terminal 0 print&#xff1a;%d\r\n", i); 3.2 多端口…

[STM32]jlink RTT使用详解

1.什么是Jlink RTT。 全称为SEGGER’s Real Time Transfer&#xff08;RTT&#xff09;&#xff0c;一种基于SEGGER公司的基于JLink调试器的交互式用户I/O的技术。故名思义&#xff0c;就是一种基于jlink的和用户进行交互的技术&#xff0c;可以直观的显示调试芯片的信息&#…

Redis-RTT

1. 什么是redis的RTT RTT是网络往返时间的简称 每一次执行redis都会向redis-server发送执行的命令(send),比如set a 1, redis-server接收到请求并执行后,会返回一个数据或结果(recv) , send时间和recv中间的时间就是RTT, 也就是说假如发送了三次redis命令,就会产生三个RTT redi…

TCP RTT 采集方法

TCP RTT 采集方法值得一提&#xff1a; 正常状态采集的 RTT 因加入了接收端 Delayed ACK&#xff0c;积累 ACK 等原因而偏大。Disorder&#xff0c;Recovery 状态采集的 RTT 相对准确&#xff0c;通过 Timestamps&#xff0c;SACK 采集。 平时抓包&#xff0c;Wireshark 如何…

keil工程,程序写多后,RTT不能打印

一、Options for Target&#xff0c;Code Generation 一般默认是Use default compiler version 5 &#xff0c;选择V6.14&#xff0c;重新编译烧录程序&#xff0c;可以继续RTT打印。 修改为&#xff1a; 二、这样编译后&#xff0c;编译速度快很多&#xff0c;但是&#xff…

RTT 内核启动流程

1.启动流程&#xff1a; RT-Thread 支持多种平台和多种编译器&#xff0c;而 rtthread_startup() 函数是 RT-Thread 规定的统一启动入口。一般执行顺序是&#xff1a;系统先从启动文件开始运行&#xff0c;然后进入 RT-Thread 的启动 rtthread_startup() &#xff0c;最后进入…

segger_rtt使用帮助

一、KEIL中添加[RTT_Syscalls_KEIL.c][SEGGER_RTT.c][SEGGER_RTT_printf.c], 并将文件夹[segger_rtt]添加到引用目录中。 二、在[SEGGER_RTT_printf.c]中顶部添加 #define NRF_LOG_USES_RTT 1 三、main()中初始化如下&#xff1a; SEGGER_RTT_Init(); //初始化 SEGGER_RTT_pr…

H7-TooL高速 DAPLINK仿真器,含全功能版 RTT Viewer

摘要&#xff1a;前几天分享了一篇使用JLink的RTT代替串口文章&#xff0c;没想到这两天安富莱家更新了H7-TOOL&#xff0c;并且包含了全功能版 RTT Viewer功能&#xff0c;试了一下感觉很不错。 有关于安富莱家的H7-TooL工具在前面我已经介绍过了&#xff0c;电子工程师必备的…

使用Jlink RTT工具打印日志

使用Jlink RTT工具打印日志 背景 平常调试代码中使用串口打印log&#xff0c;往往需要接出串口引脚&#xff0c;比较麻烦&#xff0c;并且串口打印速度较慢&#xff0c;串口的中断可能会影响代码的执行效率。 SEGGER RTT支持使用J-link调试器输出来自目标微控制器的信息&…

RTT打印log

目录 一、移植 RTT驱动 二、环境搭建 一、移植 RTT驱动 1、找到RTT驱动文件 (1) 在 J-Flash安装目录找到 RTT驱动文件并解压得到如下文件&#xff1a; (2) 找到 RTT配置文件&#xff1a; 2、在工程中添加 RTT 驱动&#xff1a; (1) 将以上文件复制到工程目录 (2) 将对应的头…

webrtc rtt 计算

Definitions RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标&#xff0c;表示从发送端发送数据开始&#xff0c;到发送端收到来自接收端的确认&#xff08;接收端收到数据后便立即发送确认&#xff09;&#xff0c;总共经历的时延。 一般认为单向时延…

《嵌入式 - 嵌入式大杂烩》详解J-Link RTT打印

开发环境: J-Link版本:V9.4 J-Link驱动版本:V760h_x86_64 Keil:V5.30 在嵌入式开发过程中,经常需要进行打印调试,通常使用串口进行打印输出,但通常串口资源有限,这时就可以通过J-Link工具里面自带的RTT实现打印,从而节约一个串口资源。 1 RTT简介 RTT全称是Real Ti…

RTT学习笔记8-RTT内核移植

RTT 内核移植接口 CortexM系列的内核移植 1.关闭中断 ;/* ; * rt_base_t rt_hw_interrupt_disable(void); ; */ rt_hw_interrupt_disable PROC ;PROC 伪指令定义函数EXPORT rt_hw_interrupt_disable ;EXPORT 输出定义的函数&#xff0c;类似于 C 语言 externMRS …

nordic 52832中添加RTT打印

JlinkRTT RTT是基于Jlink调试器的实时传输技术,可以代替串口打印一些调试信息,不需要额外接线。 nordic 52832官方例程中,会将RTT打印函数做进一步封装,下面就讲一下怎么开启52832中的RTT打印。 第一步 增加RTT代码 RTT源代码可以在segger官方网站下载,也可以在nordic 5…

计算机网络传输层——学习笔记

目录 传输层概述 多路复用和多路分解 协议 UDP协议 可靠数据传输协议&#xff08;reliable data transfer protocol RDT&#xff09; 经完全可靠信道的可靠数据传输&#xff1a;rdt 1.0 经具有比特差错信道的可靠数据传输&#xff1a;rdt 2.0 经具有比特差错的丢包信道的…