IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> JLink的RTT使用 -> 正文阅读

[嵌入式]JLink的RTT使用

前言:什么是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发生错误
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:59:50  更:2021-08-06 10:01:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:21:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码