电子说
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”设置的一致。
如果两者不一致,存在两种情况:
如果指定的速度高于J-Link所支持的速度,则驱动程序将使用所支持的最高速度(上图中,是2667 KHz而不是4000 KHz),速度不能再增大,除非选用更高速型号的J-Link。
在某些情况下,驱动程序可能会忽略Tracealyzer中的“J-Link Speed”设置,而使用默认的200KHz。解决这个问题,“Debugger Interface”中设置实际使用的调试协议(JTAG/SWD),不要使用默认设置。
2、如果两者一致,可以在“J-Link Speed”适当增大速度(默认是4000KHz),前提是J-Link支持更高的速度。各型号J-Link支持的最高速度可点击“阅读原文”查看。
3、在trcStreamingPort.h中增大TRC_CFG_RTT_
BUFFER_SIZE_UP,以增加RTT的缓存。
4、在trcConfig.h或者使用vTraceSetFilterMask() 和vTraceSetFilterGroup()过滤跟踪的事件类型,减少产生的事件数量。
总结
如果J-Link RTT 流跟踪遇到问题,首先应该根据Tracealyzer手册检查记录库的配置,如果出现事件丢失,最有效的方法是提高J-Link的速度设置,增大RTT缓存,或者减少产生的事件数量。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !