上一期已经跟着小编介绍的安装步骤,相信大家都已经开始使用了Segger Ozone调试工具。那么今天小编继续趁热打铁,给大家介绍另一个Segger推出的调试辅助工具Segger RTT。
Segger RTT(Real Time Transfer)是一款由SEGGER公司开发的嵌入式系统监控和交互工具,主要用于嵌入式应用程序中的实时数据传输和调试。
定义与功能:
RTT是一种用于嵌入式系统的实时传输技术,能够在不影响嵌入式应用实时行为的情况下,实现高速双向通信。它不仅可以输出调试信息,还可以从外部输入控制命令,支持多个通道用于不同目的。
兼容性:
RTT支持多种单片机架构,包括ARM Cortex-A/R/M系列芯片,以及RISC-V和Renesas RX等。
主要特点:
高速传输速率:RTT使用调试通道进行通信,不占用额外的GPIO等外设接口,因此传输速率极快,不会影响嵌入式应用的实时行为
双向通信能力:RTT具备与目标嵌入式应用的双向通信能力,既可以输出调试信息,也可以接收外部控制命令
多通道支持:RTT在两个传输方向上支持多个通道,每个通道可用于不同的目的,如标准输出、错误输出、调试输出等
易用性:RTT的实现代码可以免费下载,并且可以轻松集成到任何现有的应用程序中。通过在PC上使用J-Link RTT Viewer工具,用户可以方便地查看和管理多个虚拟终端。
使用场景:
替代串口调试:RTT可以替代传统的串口调试方式,节省串口资源,并降低串口打印对系统实时性的影响
中断打印:RTT支持在中断中打印信息,这是传统printf函数无法实现的
多平台支持:RTT不依赖操作系统,可以在裸机上运行,并支持多种终端端口使用
实时数据读写管理:基于目标MCU内存中的RTT控制块结构体,RTT能够实现实时数据读写管理
接下来介绍下RTT的工作原理,简单来讲RTT的工作核心是一个位于RAM中的控制块结构,以及一个环形缓冲区来处理每个通道的每个配置方向(上行/下行)。每个缓冲区都可以在运行时由应用程序配置和添加。每个通道可以配置为阻塞或非阻塞模式。示意图如下:

在Zephyr中添加RTT也可以说是一步到位,得益于Zephyr的软件框架,我们只需要通过打开几个kConfig文件的变量即可:
|
CONFIG_UART_CONSOLE=n CONFIG_RTT_CONSOLE=y CONFIG_USE_SEGGER_RTT=y CONFIG_SHELL_BACKEND_RTT=y |
通过打开这几个配置变量,重新编译Zephyr代码,当我们想要通过调用printk来打印时,即可实现通过Segger RTT来进行输出:

让我们来看下具体实现,通过单步调试,打开printk的源代码,我们可以看到,其底层实际上调用的是SEGGER_RTT_Write()函数: 这样一来,我们就可以省掉一个uart口,只通过Jlink这个调试端口进行log信息的打印。以防止某些时间敏感代码在运行时受到影响。
全部0条评论
快来发表一下你的评论吧 !