使用Jlink的RTT Viewer实现串口打印输出数据功能

在Keil MDK AC6编译器下,由于结构替换问题无法使用ITM串口输出。本文介绍了一种替代方案——使用RTT Viewer实现串口打印输出,无需SWO引脚,性能优于ITM方式。通过添加RTT源代码、包含头文件并使用SEGGER_RTT_printf函数,结合JLinkRTTViewer,可以实现高效的实时数据传输。

问题提出:
自从Keil MDK的编译器从AC5更新到AC6之后,原先使用的ITM串口输出方式编译时总提示错误,
因为结构替__FILE需要重新定义;
而目前又没有找到合适的让AC6编译通过的办法。
无奈之下,寻找能替代ITM串口输出的办法,还真找到了,就是RTT Viewer方式的串口输出。
问题解答:
ITM方式串口输出,使用了MCU的SWO(Serial Wire Output)引脚,
RTT方式串口输出,不需要通过SWO引脚,即可实现printf输出,而且性能(耗时)远远高于ITM方式。
在这里插入图片描述

如上图所示,semihosting耗时10700uS,ITM方式耗时120uS,而RTT只需要耗时1uS就可以了。

RTT:Real Time Transfer,实时传输。
SEGGER实时传输RTT是一种在嵌入式应用中实现交互式用户I/O的技术。

需要如下三个步骤实现通过RTT的printf。
1、将RTT源代码添加到目标工程中。
A、打开Jlink的安装目录,比如我安装在目录D:\Program Files (x86)\SEGGER\JLink_V650b;
当然,也可以从官网下载最新版的Jlink,性能会更强一些,兼容性会更好一些。
下载地址:https://www.segger.com/downloads/jlink/JLink_Windows.exe
下载完成后,得到JLink_Windows_V694b.exe,安装后的Jlink目录为D:\Program Files (x86)\SEGGER\JLink;
打开Samples\RTT目录,将SEGGER_RTT_V694b.zip解压,将RTT整个目录复制到目标工程与MDK-ARM同级目录;

B、将RTT目录下的两个c文件SEGGER_RTT.c和SEG

<think>嗯,用户问的是如何使用J-Link RTT Viewer配合MobaXterm来打印日志。首先,我需要确认自己对这两个工具的了解是否正确。J-Link RTT Viewer是Segger公司提供的工具,用来通过RTT(Real-Time Transfer)技术从目标设备实时传输数据,比如日志信息,而不需要额外的串口硬件。而MobaXterm是一个功能强大的终端软件,支持多种协议,包括SSH、串口等,用户可能想用它的终端功能来显示日志。 接下来,用户的问题是如何将两者结合起来。可能的步骤包括配置J-Link RTT Viewer将日志输出到某个端口,然后让MobaXterm连接到这个端口来显示日志。需要确认RTT Viewer是否支持将数据重定向到虚拟串口,或者是否需要使用其他工具作为中间桥梁。 我记得RTT Viewer本身有一个Telnet服务器的功能,可以监听某个端口,然后MobaXterm通过Telnet连接这个端口来获取日志。或者可能需要使用J-Link的软件包中的工具,比如JLinkExe,配合参数来启用RTT并通过某个端口输出。比如,在JLinkExe中使用-rtt参数,并指定端口号,然后在MobaXterm中用串口或者TCP连接该端口。 可能需要详细步骤,比如先启动JLinkExe,配置目标设备,开启RTT,然后设置MobaXterm连接对应的TCP端口。另外,还需要确保目标设备的固件已经启用了RTT功能,即包含了SEGGER_RTT的库,并且应用程序正确调用了RTT的API来输出日志。 用户可能的疑问点包括:如何安装和配置J-Link软件,如何在代码中添加RTT输出,如何在MobaXterm中设置连接,以及可能遇到的连接问题,比如端口被占用或者防火墙阻止连接。需要逐一解释这些步骤,并给出具体的命令或配置示例。 另外,可能需要注意操作系统的问题,比如在Windows下是否需要管理员权限来访问端口,或者路径设置是否正确。还要提醒用户检查J-Link的版本是否支持相关功能,以及MobaXterm的版本是否兼容。 可能还需要补充一些常见问题的解决方法,例如连接不上时的排查步骤,检查RTT缓冲区大小,确认目标设备是否正确初始化RTT等。确保回答结构清晰,分步骤说明,让用户能够逐步操作,避免遗漏关键点。</think>### J-Link RTT Viewer 结合 MobaXterm 打印日志分步指南 #### 1. **准备工作** - **硬件要求**: - J-Link 调试器(如 J-Link EDU/PRO)连接目标设备。 - 目标设备需烧录支持 RTT 的固件(需集成 `SEGGER_RTT` 库)。 - **软件安装**: - 安装 [J-Link Software Pack](https://www.segger.com/downloads/jlink/)(包含 RTT Viewer)。 - 安装 [MobaXterm](https://mobaxterm.mobatek.net/)(用于终端显示)。 #### 2. **目标设备固件配置** - 在代码中调用 RTT 输出函数: ```c #include "SEGGER_RTT.h" // 输出日志(例如在 main 函数中) SEGGER_RTT_WriteString(0, "Hello RTT via MobaXterm!\n"); ``` - 确保编译时链接 `SEGGER_RTT` 库文件(如 `.a` 或 `.lib`)。 #### 3. **启动 J-Link RTT Server** - **步骤**: 1. 打开 J-Link 安装目录下的 **JLinkRTTServer.exe**。 2. 选择目标设备型号(如 STM32F407)。 3. 设置连接接口(如 SWD)和速度(默认 4000 kHz)。 4. 勾选 **"Enable RTT"** 并配置 RTT 通道(默认 Channel 0)。 5. 在 **Telnet Port** 中设置端口号(例如 `19021`)。 6. 点击 **"OK"** 启动服务。 ![J-Link RTT Server 配置示例](https://www.segger.com/img/products/jlink/RTT_Viewer.png) #### 4. **MobaXterm 连接 RTT 日志** - **操作步骤**: 1. 打开 MobaXterm,点击顶部 **"Session"** → **"New Session"**。 2. 选择 **"Telnet"** 模式。 3. 输入服务器地址:`localhost`,端口填写 JLinkRTTServer 设置的端口(如 `19021`)。 4. 点击 **"OK"** 建立连接。 - **成功标志**:终端窗口显示目标设备输出RTT 日志。 #### 5. **高级调试技巧** - **多通道分离**: - 若使用多个 RTT 通道(如 Channel 0 输出日志,Channel 1 输入命令),可在 MobaXterm 中打开多个 Telnet 会话,分别连接不同端口。 - **日志保存**: - 在 MobaXterm 中右键终端窗口 → **"Save terminal output"** 可保存日志文件。 #### 6. **常见问题排查** - **无日志输出**: - 检查目标设备是否正常供并运行。 - 确认 `SEGGER_RTT_Init()` 已调用(部分库需手动初始化)。 - 增大 RTT 缓冲区大小(修改 `SEGGER_RTT_Conf.h` 中的 `BUFFER_SIZE_UP`)。 - **连接失败**: - 关闭防火墙或杀毒软件。 - 确认 JLinkRTTServer 和 MobaXterm 使用相同端口。 #### 7. **替代方案(无需 RTT Server)** - **直接通过 J-Link 命令**: ```bash JLinkExe -device <DEVICE> -if SWD -speed 4000 -autoconnect 1 JLinkRTTClient -telnetport 19021 ``` 在 MobaXterm 中同样通过 Telnet 连接端口 `19021`。 --- 通过以上步骤,即可实现通过 MobaXterm 实时显示 J-Link RTT 日志,适用于嵌入式开发中低延迟的调试场景。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值