2264|2

79

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

N32G45x系列MCU使用JLINK的开发应用记录之RTT篇 [复制链接]

 

前言

什么是RTT?

RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术,它结合了SWO和半主机的优点,具有极高的性能。使用RTT可以从MCU非常快速输出调试信息和数据,且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU,兼容性强。RTT支持两个方向的多个通道,上到主机,下到目标,它可以用于不同的目的,为用户提供尽可能多的自由。默认实现每个方向使用一个通道,用于可打印终端输入和输出。

使用RTT,可以快速地从目标MCU输出信息,或者向应用输入信息,而不会影响目标系统的实时性。RTT支持所有型号J-Link,及Cortex-M和RX、RISC-V支持后台内存访问的目标处理器。当然支持N32所有型号的单片机。

RTT支持双向多通道,默认每个方向实现一个通道,用于输入和输出。使用J-Link Viewer软件,通道可以用于多个虚拟终端,允许打印到多个窗口,只使用一个缓冲区。例如,一个用于标准输出,一个用于错误输出,一个用于调试输出。

SEGGER RTT的性能显著高于用于向主机PC输出数据的任何其他技术,平均一行文本可以在1微秒或更少的时间内输出。基本上只需要一个memcopy()执行的时间。

 

应用场景

Jlink RTT全称为SEGGER’s Real Time Transfer(RTT),一种基于SEGGER公司的基于JLink调试器的交互式用户I/O的技术。故名思义,就是一种基于jlink的和用户进行交互的技术,可以直观的显示调试芯片的信息,以及可以让用户和调试芯片进行互动的技术。使用J-Link RTT Viewer,可用于“虚拟”终端,允许打印到多个窗口(例如,一个用于标准输出,一个对于错误输出,一个用于调试输出)。

 

使用Jlink RTT优点:

3.RTT的通信可以通过不同的应用程序完成,可以使用SDK集成到自定义的应用程序中,可本地连接,可远程连接。

基于以上3个优点,如果你还在调试N32芯片的时比使用USART进行用户交互要高效的多。

 

Jlink RTT说明

调试示意图

 

 

JlinkRTT原理

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字节(下行信道),这取决于输入/输出的负载。

Segger提供了RTT Viewer、RTT Client和RTT Logger3个工具用于RTT的访问,下面列出这几个工具的优缺点。

 

SEGGER RTT的实现代码是用ANSI C编写的,可以通过简单地添加源代码集成到任何嵌入式应用程序中。RTT通过一个简单易用的API来使用,使用RTT可以将输出时间减少到最少,并允许在应用程序执行实时任务时将调试信息打印到主机。实现代码还包括一个简化版本的printf(),它可用于通过RTT编写格式化的字符串。它比大多数标准库printf()实现都要小,并且不需要使用Heap。

SEGGER RTT在编译时是完全可配置的,可以设置通道的数量和默认通道的大小。通过可定义的Lock()和Unlock()例程,使读写操作是线程安全的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

优点

缺点

RTT Viewer

1、图形化界面,操作简单;2、支持读、写、文件存档;3、支持多通道;

1、性能不够好,速度达不到官方宣传的数据,数据量大的时候会丢;2、功能上不像xShell这种工具那么强;

RTT Client

1、性能可以,比Viewer好很多;2、当debug停止的时候会自动重连;

1、不像viewer操作那么简单;2、需要进入debug模式才能使用;3、不支持多通道;

RTT Logger

1、不需要进入debug模式;2、支持文件存档;

1、只支持通道1;

 

 

软件配置

 

 

移植RTT的SDK包到工程文件

解压后可以看到如下图所示文件,Example目录是参考的demo,RTT和Syscalls文件夹下就是移植所需要的文件

 

 

 

Example目录内容:

 

 

 

RTT目录内容:

Syscalls目录内容:

注意:发现keil引用RTT文件时不需要引用SEGGER_RTT_Syscall_KEIL.c,添加反而报错。

将代码添加到工程中

添加头文件路径

 

编译选项注意

一定要 取消 这个勾选!!!

 

 

 

 

 

工程测试

功能描述

测试添加#include "SEGGER_RTT.h"

测试代码:

 

 

 

 

 

 

代码分析

测试代码为SEGGER_RTT_printf不同数据类型格式,浮点转字符串,指针地址打印,程序循环等,对程序开发调试具有普遍意义。

因为官方的RTT View不能打印出float类型的数据,因此简单写了个float转字符串的函数。

float value = 3.1415; unsigned char length;

SEGGER_RTT_printf(0,"value = %s \n",out_float(value,4,&length));

 

测试结果

编译下载,重新上电,然后打开J-Link RTT Viewer,点击OK就可以看到输出结果,如果想仿真调试,需要先进入仿真状态,然后在点击OK。

 

 

 

 

 

 

 

 

logger打印:

 

 

 

 

 

 

打开RTT Client后显示如下:

 

 

 

 

 

 

 

注意事项

RTT Viewer非常强大,可以设置显示的颜色,格式化输出等,具体的函数说明可以查看

 

 

 

 

 

 

 

 

 

 

此帖出自编程基础论坛

最新回复

之前用过几次,有过打印延迟很严重的情况。   详情 回复 发表于 2022-11-11 16:11
点赞 关注
 

回复
举报

79

帖子

3

TA的资源

一粒金砂(中级)

沙发
 

国民单片机N32GX系列联合Jlink之RTT测试

 

此帖出自编程基础论坛
 
 
 

回复

7175

帖子

2

TA的资源

版主

板凳
 

之前用过几次,有过打印延迟很严重的情况。

此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表