Tracealyzer实现流跟踪最简单的方法

电子说

1.3w人已加入

描述

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实例并查看状态。

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

事件丢失

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

J-Link

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

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

J-Link

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

如果指定的速度高于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缓存,或者减少产生的事件数量。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分