"); //-->
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”设置的一致。
如果两者不一致,存在两种情况:
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。
eleaction01 阅读:6191