注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
mameng的个人空间 http://home.eeworld.com.cn/space-uid-440926.html [收藏] [复制] [分享] [RSS]
日志

N32G45x系列MCU使用JLINK的开发应用记录之RTT篇

已有 515 次阅读2022-11-11 08:15

 

前言

什么是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,添加反而报错。

将代码添加到工程中