J-Link RTT通过调试接口读写目标RAM中的控制块和环形缓冲区,不需要额外占用串口引脚。处理“J-Link RTT怎么配置J-Link RTT窗口没有输出数据如何处理”时,要同时检查目标程序、RTT Viewer连接和控制块地址;只打开电脑端窗口,目标程序没有初始化或写入通道,同样不会显示数据。
一、J-Link RTT怎么配置
RTT配置分为目标端代码和电脑端连接两部分。建议先让通道0输出固定字符串,确认基础链路正常后,再接入完整日志系统。
1、把RTT源码加入工程
①从SEGGER RTT源码包中找到SEGGER_RTT.c、SEGGER_RTT.h和配置头文件。
②将SEGGER_RTT.c加入工程编译列表。
③把RTT头文件目录加入编译器包含路径。
④检查上行、下行通道数量,至少保留通道0。
⑤根据日志量调整上行缓冲区大小。
⑥重新编译,确认没有重复定义或未解析符号。
RTT控制块和缓冲区位于RAM,通道0会在初始化或第一次执行RTT写操作时建立。缓冲区可以配置为阻塞、空间不足时整条丢弃,或仅写入剩余空间。
2、在程序中加入测试输出
①在使用RTT的源文件中加入#include"SEGGER_RTT.h"。
②在系统基础初始化完成后调用SEGGER_RTT_Init()。
③使用SEGGER_RTT_WriteString(0,"RTT testn");输出固定字符串。
④需要输出变量时,改用SEGGER_RTT_printf()。
⑤下载程序并让目标持续运行。
⑥确认测试代码能够被实际执行。
控制块位于非零初始化RAM区域时,应先执行SEGGER_RTT_Init()。RAM运行工程还可启用SEGGER_RTT_IN_RAM,避免J-Link误识别加载镜像中的控制块特征。
3、连接J-Link RTT Viewer
①打开【J-Link RTT Viewer】。
②在【Connection to J-Link】中选择USB、TCP/IP或【Existing Session】。
③选择完整的目标器件型号,不要只选择处理器内核。
④设置正确的JTAG或SWD接口及通信速度。
⑤将【RTT Control Block】设为自动搜索。
⑥点击【OK】,在【Terminal 0】查看输出。
RTT Viewer既可以独立连接目标,也可以附加到IDE已经建立的J-Link会话。连接后目标处于停止状态时,可启用【Force Go on Connect】,让程序继续运行并产生数据。
二、J-Link RTT窗口没有输出数据如何处理
窗口没有数据时,先观察是连接失败、找不到控制块,还是已经找到控制块但接收量始终为零。不同状态不能混在一起排查。
1、提示找不到RTT控制块
①打开工程生成的map文件。
②搜索_SEGGER_RTT,记录控制块地址。
③回到RTT Viewer的连接设置。
④将【RTT Control Block】改为固定地址。
⑤填入map文件中的控制块地址并重新连接。
⑥地址会变化时,改为设置指定RAM搜索范围。
自动搜索只会检查J-Link软件已知的部分RAM。控制块位于自定义RAM、外部RAM或特殊地址区域时,应直接填写地址,或限定正确的搜索范围。
2、控制块已找到但窗口仍为空
①在主循环中临时加入周期性测试字符串。
②检查写入函数使用的通道编号是否为0。
③切换到【All Terminals】和【Terminal 0】查看。
④确认程序没有停在断点或Fault处理函数中。
⑤检查程序是否反复复位,导致输出代码没有执行。
⑥关闭其他RTT Viewer、RTT Client或日志读取程序。
RTT终端文字通常从上行通道0读取。多个电脑端程序同时获取RTT数据时,其中一个程序可能先取走数据,另一个窗口便会没有输出或只显示零散内容。
3、运行一段时间后停止输出
①暂时关闭休眠、深度睡眠和低功耗流程。
②检查低功耗状态是否关闭了RAM或调试模块。
③降低循环中的日志输出频率。
④增大RTT上行缓冲区。
⑤根据需求调整阻塞、丢弃或截断模式。
⑥带缓存的处理器检查缓冲区对齐和缓存维护。
目标进入低功耗状态后,J-Link可能无法继续执行后台RAM访问。带缓存的Cortex-A、Cortex-R或部分高性能处理器,还要保证控制块和缓冲区能通过调试访问路径读取。
三、怎样确认RTT输出已经恢复正常
问题处理完成后,要继续验证重新连接、高频输出和重新上电,避免当前调试会话正常,下一次启动又找不到控制块。
1、验证基础输出链路
①只保留每秒一次的测试字符串。
②重新下载程序并启动RTT Viewer。
③查看控制块地址是否稳定。
④检查累计接收字节数是否持续增加。
⑤分别测试独立连接和【Existing Session】连接。
⑥断开后重新连接一次。
J-Link控制面板的RTT页面可以查看运行状态、控制块地址、数据速率、累计接收量和缓冲数据。控制块已找到但接收量不增长时,应继续检查目标端写入代码。
2、逐步恢复正式日志
①恢复任务日志并观察输出。
②恢复中断日志,检查是否出现缺行。
③恢复格式化输出,观察程序是否卡顿。
④高频二进制数据改用独立上行通道。
⑤固定控制块所在链接段和RAM区域。
⑥保存器件、接口、速度及搜索地址配置。
每恢复一类日志都重新测试,能较快找出是输出量过大、缓冲区不足,还是某个任务破坏了控制块。通道0保留终端文字,高频采样数据单独传输,后续检查会更清楚。
总结
“J-Link RTT怎么配置J-Link RTT窗口没有输出数据如何处理”需要把目标端源码、通道写入、RTT Viewer连接和控制块位置放在一起检查。出现空窗口时,先判断控制块是否被找到,再核对通道、程序运行状态、电脑端占用和低功耗影响,比反复重启软件更容易定位原因。希望本文对大家配置J-Link RTT和排查窗口无输出问题有所帮助。