搜索
bottom↓
回复: 6

一些SEGGER RTT、MDK Event Recorder等记录/跟踪软件的思考

[复制链接]

出0入25汤圆

发表于 2019-2-27 14:36:37 | 显示全部楼层 |阅读模式
本帖最后由 XIVN1987 于 2019-2-27 14:39 编辑

论坛里很多大神分享了SEGGER RTT、SEGGER J-Scope、SEGGER System View、MDK Event Recorder、MDK System Analyzer等记录、跟踪软件的使用方法,,受益匪浅,,

但这么多功能类似的软件,它们有什么区别和联系呢??我自己做了一些比较和思考,,分享在这里和坛友一起探讨,,欢迎指正

SEGGER RTT VS MDK Component Viewer,侵入式 VS 非侵入式
所谓侵入式,即需要编写额外代码,将想要跟踪的信息通过组件API写入跟踪Buffer。比如RTT,需要将SEGGER_RTT.c等文件加入自己的项目工程中,然后调用其中的SEGGER_RTT_Write()等函数将想要发送出去的信息写入upBuffer

所谓非侵入式,即不需要在单片机程序中加入额外代码,比如MDK Component Viewer,它只需要你编写*.SCVD文件,告诉上位机你想显示单片机内存哪个地址的变量、这个变量是什么类型的,上位机就通过调试器读取该地址的指定长度,然后依照*.SCVD的描述显示该变量

非侵入式的优点显而易见,即不需要更改产品代码,但也有如下缺点:
1、不能完整跟踪变量的变化过程,只能快照式抓取部分状态,所以只适合跟踪缓慢变化的变量;而侵入式可以通过API将变量的所有变化过程存入Buffer,记录完整状态变化
2、只能跟踪有固定地址的变量,即全局变量和静态变量
3、需要某种手段告诉上位机你想要跟踪的变量在RAM中的位置、以及它的大小,比如MDK Component Viewer中的*.SCVD文件

我之前分享的SVDView和HFView也都属于非侵入式的调试手段,它们都不要求修改单片机代码,SVDView的跟踪变量描述信息来自器件的SVD文件,HFView的跟踪变量描述信息来自单片机的栈寄存器SP和反汇编文件中解析出的函数调用关系

MDK Component Viewer要求编写SCVD文件描述想要跟踪变量的地址和类型、以及希望的显示格式,通过SCVD文件可以非常精确的描述跟踪需求。但其实程序中全局/静态变量的地址、大小等信息在编译生成的.map文件中已经有描述,所以如果不要求非常精确的跟踪的话,可以从.map文件中解析变量信息、而非手写SCVD文件,我编写的VarView即用此方法实现的

MDK Event Recorder VS SEGGER RTT,结构化信息 VS 非结构化信息
SEGGER RTT通过SEGGER_RTT_Write()等函数写入upBuffer的就是直接的跟踪数据字节流,数据中并没有记录数据的结构信息,一般只能当作类似printf()打印出的字符来显示。

而MDK Event Recorder通过EventRecord2()等函数写入Buffer的不仅有跟踪数据,还有该数据的时间戳、组件ID、消息ID、数据长度、校验位等信息,因此上位机可以结构化甚至图形化的显示这些跟踪信息,结构化的Event Recorder可以完成很多RTT无法完成效果:
1、记录了跟踪数据的格式信息,从而上位机可以自动确定数据的显示格式
2、提供了8位消息ID、8位组件ID、消息等级,方便消息筛选;RTT只提供了通道
3、EventRecord_t中记录了时间戳(基于DWT Cycle Counter),方便分析事件发生的时间
4、Event Filter使得无需修改目标板程序即可设定记录哪些跟踪信息

SEGGER公司的System View类似于Event Recorder,它底层基于RTT完成信息的传递,但提供了SEGGER_SYSVIEW_RecordU32()等记录API,给要输出的跟踪信息添加事件ID、时间戳等信息




出0入0汤圆

发表于 2019-2-27 16:55:06 来自手机 | 显示全部楼层
还没用过类似的,谢谢

出0入0汤圆

发表于 2019-2-27 17:09:15 | 显示全部楼层
“Event Recorder ”是不是只能处于仿真状态才可以看到数据?

出0入8汤圆

发表于 2019-2-27 17:15:29 | 显示全部楼层
关注一下。
只用过 RTT。

出0入25汤圆

 楼主| 发表于 2019-2-27 17:25:22 | 显示全部楼层
sup888 发表于 2019-2-27 17:09
“Event Recorder ”是不是只能处于仿真状态才可以看到数据?


理论上不是,,

但因为只有Keil进入调试状态时,,才能从它的菜单下调出 Event Recorder 窗口,,所以要用Keil中的Event Recorder窗口的话必须进入调试状态

但理论上我们可以自己写一个Event Recorder上位机,,这样就不用进入调试状态了,,因为Event Recorder只是需要通过调试器从芯片RAM中读取数据,,并不需要芯片进入调试状态

出0入0汤圆

发表于 2019-2-27 21:19:30 | 显示全部楼层
XIVN1987 发表于 2019-2-27 17:25
理论上不是,,

但因为只有Keil进入调试状态时,,才能从它的菜单下调出 Event Recorder 窗口,,所以 ...

听起来很高深,等大神的教程

出0入8汤圆

发表于 2019-2-27 21:34:10 来自手机 | 显示全部楼层
调试是个复杂的事情,做得最好的就是Visual Studio
VS的做法是在debug版本代码中,在合适的地方插入额外代码,追踪运行过程
这样外面看起来就是非入侵式的,这个需要编译器支持

同理,关于结构化的信息,在调用记录函数的时候,通过编译器生成额外的类型签名信息,再通过分析elf文件还原数据类型

综上,要构建一个很好用的调试环境,得在编译器上做文章
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 04:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表