0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

倩倩 来源:麦克泰技术 作者:麦克泰技术 2022-08-19 11:17 次阅读

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

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

侵入式调试手段如下:

• 停机以及单步执行程序

硬件断点和断点指令(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端调试软件读取该区域内数据以获取指令跟踪数据。

a6288a54-1f6c-11ed-ba43-dac502259ad0.png

使用该方式实现指令跟踪存在的限制:

• 片上的缓存空间很小,通常缓存空间大小只有kb级别

• 只能记录非常有限的指令执行历史记录

(2)使用调试器内部缓存进行指令跟踪

另外一种实现指令跟踪的方式是调试器内部提供指令缓存空间,缓存空间大小可能为MB到GB级别,但受限于调试器本身的硬件实现成本,调试器内部所能够提供的缓存空间同样不会很大。

a63513c8-1f6c-11ed-ba43-dac502259ad0.png

该方式实现指令跟踪存在的限制:

• 片上的缓存空间为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级别,彻底解决了前面两种实现方式所存在的局限性。

a644f2d4-1f6c-11ed-ba43-dac502259ad0.png

J-Trace Pro支持通过流模式实时的将指令跟踪数据传输到电脑端,该方案还带来了如下优势:

• 指令缓存空间大小取决于电脑硬盘大小(TB级别)

• 能够记录应用从开始执行到出现异常的完整指令过程

• 能够记录用户与应用程序发生交互行为中的指令执行过程

• 提供的其他高级调试功能:

实时代码覆盖率分析

实时的代码执行情况分析

a659560c-1f6c-11ed-ba43-dac502259ad0.png

本文介绍了嵌入式MCU调试过程中几种指令跟踪调试功能的实现方式,对比可以发现Segger J-Trace Pro产品的解决方案具有明显优势,此外Segger还提供了配套的调试软件Ozone,能够提供强大的指令跟踪调试功能

审核编辑 :李倩

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

    关注

    146

    文章

    17002

    浏览量

    350332
  • 嵌入式
    +关注

    关注

    5069

    文章

    19021

    浏览量

    303412
  • 寄存器
    +关注

    关注

    31

    文章

    5322

    浏览量

    120022

原文标题:如何使用SEGGER J-Trace Pro流模式实现指令跟踪功能?

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    加速调试嵌入式软件的五个技巧

    调试嵌入式软件是我最不喜欢的行为,不幸地是,它却是必要的。值得庆幸地是,技术和工具链创新的进步衍生出大量的新技术,从而大大地加快了调试过程。下面让我们来看看其中一些方法,从传统的断点调试
    发表于 06-04 01:46 1940次阅读

    嵌入式硬件调试和软件调试

    ,并且提供了非常丰富的调试功能。在使用在线仿真器进行调试过程中,可以按顺序单步执行,也可以倒退执行,还可以实时查看所有需要的数据,从而给调试过程
    发表于 03-10 10:44

    嵌入式系统的Proteus仿真中源码调试方式介绍

    (Integrated Development Envi-ronment,IDE)源码调试功能。不仅能跟踪、分析嵌入式系统内的指令执行,观察
    发表于 07-29 06:15

    在VIM如何实现嵌入式软件的调试

    gdb对嵌入式软件的调试模式有哪几种?在VIM如何实现嵌入式软件的
    发表于 04-27 06:04

    初步掌握嵌入式程序的编译和调试过程

    实验一 嵌入式开发环境的建立 一、实验目的1,掌握嵌入式软件开发环境的建立过程;2,初步掌握嵌入式程序的编译和调试过程。二、实验步骤1,安装
    发表于 11-05 08:51

    嵌入式开发调试经验分享

    嵌入式开发过程中的一点调试经验嵌入式开发最麻烦的在现场调试过程中或实际运营过程中出现问题很难定位。我在实际开发
    发表于 11-05 08:15

    如何调试嵌入式代码?

    、CMSIS-DAP 等硬件调试器在嵌入式开发调试过程中扮演了怎样的角色呢?目标芯片内部是如何处理Debug and Trace 信号的?我们如何借助VS Code Cortex-Debug 或IDE
    发表于 12-17 06:32

    如何使用SEGGER J-Trace Pro流模式实现指令跟踪功能

    能够记录问题发生之前MCU内部的指令执行历史记录,这些信息可以帮助开发者回溯问题现场来准确定位问题发生的原因。指令跟踪实现
    发表于 09-07 11:10

    调试嵌入式处理器的几种常用方法

    调试嵌入式处理器的几种常用方法 前言 在任何产品
    发表于 03-11 12:25 1593次阅读
    <b class='flag-5'>调试</b><b class='flag-5'>嵌入式</b>处理器的<b class='flag-5'>几种</b>常用方法

    嵌入式系统的远程调试

      1 基本方法   图1(a)是传统的嵌入式调试方法:主机PC通过串口与从机嵌入式系统相连,接收从嵌入式系统发来的调试信息并向
    发表于 08-30 10:23 1006次阅读
    <b class='flag-5'>嵌入式</b>系统的远程<b class='flag-5'>调试</b>

    单片机调试过程中调试组件导致的问题

    单片机调试过程中,经常会遇到类似第3只眼的问题。何谓第3只眼呢?
    的头像 发表于 12-30 17:12 7367次阅读
    单片机<b class='flag-5'>调试过程中</b>的<b class='flag-5'>调试</b>组件导致的问题

    浅析STM32调试过程中的几个相关问题

    总的来讲,单片机调试是单片机开发工作必不可少的环节。不管你愿不愿意,调试过程中总会有各种不期而遇的问题出现在我们面前来磨砺我们。这里分享几点STM32调试过程中与开发工具及IDE有关的几个常见问题,以供参考。
    的头像 发表于 01-21 13:50 5378次阅读

    嵌入式软件的打印调试信息的方法

    在我们的嵌入式开发,常常把printf重定向到MCU的串口外设,再配合上位机界面软件,通过打印调试信息的方式
    的头像 发表于 04-04 17:35 3245次阅读

    如何实现嵌入式系统远程调试

    嵌入式系统随着目前科技的发展,正逐步融入人们的生活。对于嵌入式系统,我们应该有所了解。就专业人员而言,他们对嵌入式系统早已驾轻就熟。为增进大家对
    的头像 发表于 11-22 11:55 5302次阅读
    如何<b class='flag-5'>实现</b><b class='flag-5'>嵌入式</b>系统远程<b class='flag-5'>调试</b>

    嵌入式开发过程中的一点调试经验

    嵌入式开发过程中的一点调试经验嵌入式开发最麻烦的在现场调试过程中或实际运营过程中出现问题很难定位。我在实际开发
    发表于 11-02 18:06 15次下载
    <b class='flag-5'>嵌入式开发过程中</b>的一点<b class='flag-5'>调试</b>经验