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缓存,或者减少产生的事件数量。
科学家研发可拯救溺水者的水下机器人
8月全球手机面板同比下滑1%,BOE和LGD在AMOLED中争逐第二
苹果对大内存仍然无动于衷 iPhone8内存会有大动作吗?
小米欲收购联想手机?联想常程否认并晒出ZUI3.9.017稳定版本截图
5G上路后能否激发消费VR市场的起飞
Tracealyzer实现流跟踪最简单的方法
坚果Pro2体验 确确实实比前作提升很多
混合专家模型 (MoE)核心组件和训练方法介绍
PNP与NPN哪个是“源”与”漏“的浑水
LG或供货上海特斯拉,动力电池“新陈代谢”加速
拓展基于电磁学巴比涅原理的布克关系式
Cybertrust和Quadric.io提供具有前所未有性能的端到端Edge超级计算平台
网络高清解码器与大屏拼接处理器的不同之处
GM5539光电电阻为什么未能在PCB上保留任何焊盘以容纳它?
我们有什么办法能够避免不被机器人所取代?
三星Galaxy A8s正式发布正面采用挖孔屏设计屏幕为黑瞳全视屏
年度总决赛即将打响, 20余个项目角逐嘉兴经开区
日本5G技术究竟发展到什么程度
源创通信Banana Pi BPI-W2 开源硬件介绍
支付机构躺着赚钱的时代已经过去,是时候起来搬砖了