侵入式调试和非侵入式调试
在嵌入式应用的开发过程中,需要通过调试来解决程序运行过程中出现的问题,根据是否会打断程序的“全速运行状态”,调试方式可以分为侵入式调试和非侵入式调试两类。
侵入式调试手段如下:
• 停机以及单步执行程序
• 硬件断点和断点指令(BKPT)
• 变量数据观察点(Watch观察窗口)
• 访问寄存器的值
• 调试监视器异常
非侵入式调试手段如下:
• 在内核运行的时候访问存储器
• 指令跟踪,需要硬件包含指令跟踪单元(ETM)
通常情况下,我们采用的是侵入式调试,但这种调试会打破程序的全速运行状态。非侵入式调试则可以在保证程序全速运行的情况下,了解程序运行的情况。在调试大型软件和RTOS多任务系统,或者与通信时序相关的应用时(非侵入式调试会破坏通信时序),应用代码可能突然跑飞或者产生异常中断,而导致问题的原因可能难以发现。
此时非侵入式调试如指令跟踪这样的功能就有着不可比拟的作用。指令跟踪能够记录问题发生之前MCU内部的指令执行历史记录,这些信息可以帮助开发者回溯问题现场来准确定位问题发生的原因。
指令跟踪的实现方式
在嵌入式MCU调试中指令跟踪存在多种实现方式,通过对比我们将能够更清楚的了解Segger J-Trace Pro产品流模式指令跟踪功能的强大之处。
(1)使用MCU片上缓存实现指令跟踪
一些MCU内部包含指令缓存区域,缓存区域依据不同芯片型号命名可能有所不同,例如Embedded Trace Buffer(ETB),Micro Trace Buffer(MTB),Embedded Trace FIFO(ETF)等。指令跟踪记录被保存在该片上区域,当程序停止运行时,PC端调试软件读取该区域内数据以获取指令跟踪数据。
使用该方式实现指令跟踪存在的限制:
• 片上的缓存空间很小,通常缓存空间大小只有kb级别
• 只能记录非常有限的指令执行历史记录
(2)使用调试器内部缓存进行指令跟踪
另外一种实现指令跟踪的方式是调试器内部提供指令缓存空间,缓存空间大小可能为MB到GB级别,但受限于调试器本身的硬件实现成本,调试器内部所能够提供的缓存空间同样不会很大。
该方式实现指令跟踪存在的限制:
• 片上的缓存空间为MB到GB范围
• 能记录有限的指令执行历史,但无法记录从应用开始执行到出现异常的全过程指令记录
• 通常需要暂停应用运行后,PC端软件才会读取缓存在调试器中的Trace数据
Segger J-Trace Pro流模式指令跟踪
前面的两种实现方式都因为缓存空间大小的影响而有其使用局限性,Segger J-Trace Pro产品则使用流模式的方式解决了前面两种方式存在的问题,能够给开发者带来成熟的指令跟踪解决方案。J-Trace Pro在SWD/JTAG调试接口引脚之外,与芯片通过额外的跟踪功能引脚连接,包括Trace时钟和数据传输引脚,MCU内部ETM模块中记录的指令通过J-Trace Pro以流模式的方式实时传输到PC端,此时指令的缓存空间在PC电脑端,因此最大的缓存空间甚至可以达到TB级别,彻底解决了前面两种实现方式所存在的局限性。
J-Trace Pro支持通过流模式实时的将指令跟踪数据传输到电脑端,该方案还带来了如下优势:
• 指令缓存空间大小取决于电脑硬盘大小(TB级别)
• 能够记录应用从开始执行到出现异常的完整指令过程
• 能够记录用户与应用程序发生交互行为中的指令执行过程
• 提供的其他高级调试功能:
实时代码覆盖率分析
实时的代码执行情况分析
本文介绍了嵌入式MCU调试过程中几种指令跟踪调试功能的实现方式,对比可以发现Segger J-Trace Pro产品的解决方案具有明显优势,此外Segger还提供了配套的调试软件Ozone,能够提供强大的指令跟踪调试功能
审核编辑 :李倩
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:嵌入式MCU调试过程中几种指令跟踪调试功能的实现方式-嵌入式mcu的主要特点有 https://www.yhzz.com.cn/a/8252.html