新闻  |   论坛  |   博客  |   在线研讨会
Tracealyzer J-Link RTT流跟踪常见故障
13261589816 | 2022-12-09 15:46:20    阅读:416   发布文章

Tracealyzer 实现流跟踪最简单的方法就是使用SEGGER J-Link调试器,通过RTT功能来实现数据的传送。RTT需要在RAM上建立一段缓存,在目标系统运行期间,由J-Link读取缓存中的数据。一般来说RTT的速度和可靠性比较高,但是如果您遇到了问题,可以参照以下方法尝试排除。



常规

检查


1、检查是否正确的集成了Tracealyzer跟踪记录器库,以及是否根据J-Link RTT流模式进行了正确配置,请对照产品手册检查。

2、安装最新的J-Link驱动。SEGGER经常更新驱动,IDE和Tracealyzer使用的J-link驱动通常不是最新版本。一定要让Tracealyzer和IDE使用相同的驱动版本。

3、 “PSF Streaming Settings”中的设置要符合记录器中的配置。

如果使用vTraceEnable(TRC_INIT),“Target Starts Tracing”和“Reset Target onConnect”不要勾选;

如果使用vTraceEnable(TRC_START),“Target Starts Tracing”保持勾选。

4、在Tracealzyer中检查J-Link设置。J-Link的速度和协议(JTAG/SWD)要与IDE中的设置一致。

5、检查Tracealyzer跟踪记录器库的.c和.h文件是否是同一版本。


接收不到数据



1、如果按了“Starting Recording”之后,Live Stream窗口没有接收到数据或者出现报错,比较可能的问题是J-Link驱动不能检测到RTT控制块。从电脑任务栏绿色的“J”小图标,打开J-Link控制面板。在RTT页中,状态应该显示“Located RTT control block”。如果显示“RTT Handled by other J-Link instance”,任务栏找到另外一个J-Link实例并查看状态。

图片

如果状态显示“Looking for RTT CB @…”,说明驱动没有找到RTT控制块,在IDE中查找到“_SEGGER_RTT”符号的地址(通过IDE的watch窗口或printf输出),填入RTT页的“Control block address”,然后点“Start”,或者在Tracealyzer PSF Streaming Settings设置地址。重新连接,然后应该就可以建立连接了。但要注意,每次重构建代码地址可能会变化,需要手动更新一遍。


2、脱离Tracealyzer,验证J-Link RTT通讯

先关闭Tracealyzer,下载J-Link驱动包并安装,找到JLinkRTTLogger工具。在程序中禁用Tracealyzer,并在main函数中加入如下内容:

#include “SEGGER_RTT.h”

SEGGER_RTT_Init();

SEGGER_RTT_WriteString(0, “Hello!”);

启动JLinkRTTLogger,按要求输入信息,默认值通常是1,只需按回车键接受。如果JLinkRTTLogger能获取到数据,说明RTT通讯是正常的,问题很可能是Tracealyzer跟踪记录器库的配置问题。

图片


事件丢失


在某些情况下,产生的数据超过J-Link的传输速度,就会导致RTT缓存写满,新产生的事件就会丢失,直到再次有可用的缓存。出现事件丢失的情况,在Tracealyzer的Live Stream窗口就会报告“Missed Events”,此外,实时视图中的红色区域显示了数据丢失的位置,如下图:

图片

如果出现事件丢失,按照以下步骤进行操作:


1、在Tracealyzer接收数据时,打开J-Link控制面板,确定选择“Process: Tracealyzer.exe”。检查J-Link控制面板中的“Target interface”数值是否与Tracealyzer中的“J-Link Speed”设置的一致。

图片

如果两者不一致,存在两种情况:

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
北京麦克泰软件技术有限公司(中文简称麦克泰,英文简称 BMR)成立于1995年, 是国内专业的嵌入式系统软件企业,与世界领先的嵌入式软件供应商合作有二十多年的时间,为嵌入式研发提供丰富的工具,软件,解决方案和培训服务。
推荐文章
最近访客