嵌入式MCU调试过程中几种指令跟踪调试功能的实现方式

电子说

1.3w人已加入

描述

侵入式调试和非侵入式调试

在嵌入式应用的开发过程中,需要通过调试来解决程序运行过程中出现的问题,根据是否会打断程序的“全速运行状态”,调试方式可以分为侵入式调试和非侵入式调试两类。

侵入式调试手段如下:

• 停机以及单步执行程序

• 硬件断点和断点指令(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,能够提供强大的指令跟踪调试功能

审核编辑 :李倩

 

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

全部0条评论

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

×
20
完善资料,
赚取积分