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

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

3天内不再提示

在MCU开发中如何充分利用各种类型的断点?

jf_pJlTbmA9 来源:jf_pJlTbmA9 作者:jf_pJlTbmA9 2023-09-18 16:22 次阅读

在面向高可靠性应用开发MCU程序的过程中,工程师通常会遇到设定断点的问题,断点的合理使用对于更好地编程和MCU使用是一种挑战。借助新的工具,这些断点就可以发挥巨大的作用,成为开发工作中的利器。

断点的概念非常简单,因为它的作用是在指定指令之前中断程序的执行。实现方式可以是硬件或软件。然而,简单并不意味着它不能被用于复杂的调试组合中,以达到用简单的方式解决BUG的目的。事实上,软件开发者在调试时离不开断点,但如何最好地利用断点呢?

要更好地使用各种断点,开发人员不能仅靠经验或者直觉,需要借助一些先进的开发工具来完成,它们可以帮助开发人员去了解不同断点的特点和价值。例如,在IAR Embedded Workbench工具中,开发人员可以使用以下断点:

代码断点

条件代码断点

具有读写访问的数据断点

数据日志断点

日志断点

功率断点

Trace开始和停止断点

本文将指导开发人员如何利用每一个可用的断点来更快地调试程序。

代码断点

代码断点是最简单的断点。开发人员只需要选择C代码或者反汇编窗口中的ASM指令并设置断点即可。一旦断点被触发,程序就会暂停。此时,开发人员就可以检查变量、标志和寄存器的值。换句话说,开发人员现在拥有了完全控制权限。

wKgaomUD9VCAXc48AAa_3m65sX4725.png

代码断点的数量受限于MCU硬件断点的数量,但如果代码在RAM中运行,开发人员利用软件断点,软件断点的数量则可以是无限的。即使数量有限,例如对于Arm Cortex-M,有6到8个断点,但开发人员也可以保存断点位置并在需要时禁用和启用断点。只需要选择显示View ->Breakpoints window,就可以选中/清除方框,也就是启用或禁用断点。

wKgZomUD9VOAKOgbAAWffjG9OAs877.png

在这种情况下,可以有6到8个以上的断点,但不能同时都激活。

默认情况下,IDE会设置代码断点。如果开发人员有一个I-jet仿真器,就可以在右键点击代码行时明确地选择一个flash断点。如果开发人员已经用完了现有全部硬件断点,这招会很有用。注意断点符号中的“F”说明改断点是Flash断点。IAR Embedded Workbench for Arm的7.60或更高版本中提供flash断点功能。

wKgaomUD9VWAP_7hAAYMynDgWWc676.png

条件代码断点

条件断点是代码断点与一些标志或变量(作为条件)的组合。设置好断点后,开发人员可以再次使用View->Breakpoints window来查看所有断点,也可以通过右键点击并选择Edit option来设置额外参数

wKgZomUD9VeAWjD9AAVvmGyB6RM521.png

使用的语法类似于C语言的语法,包括==、>=和<=。例如,如果想让应用在计数器等于10的时候停止在断点,则可以使用“counter==10”。

wKgaomUD9VqAO040AAIvXXNsyDA536.png

当需要在一个中断例程内设置断点时,这非常有用。如果没有条件,就不可能调试应用,因为程序将一直停止。使用标志或变量作为条件可以简化操作。此外,还可以进一步使用跳过计数器和条件检查,如true或changed。

具有读写访问的数据断点

相比其他断点,数据断点有些不同,因为它们监测对特定内存地址、标志、变量或寄存器的读写访问。数据断点使用非常直截了当只需右键点击标志或变量,然后选择选项Set dataBreakpoint即可。默认情况下,读和写的访问将被监测。如果开发人员想增加额外的设置,可以通过View->Breakpoints window和Edit option来完成。除了访问之外,还可以监测数据是否匹配。这意味着只有当数据匹配时,写或读的访问才会触发停止。选择“Edit”按钮,可以打开一个额外的窗口,可以选择绝对地址甚至是源代码行。如果是一个变量或标志,建议使用自动大小。如果需要监测更大的范围,应手动设置所需的大小。

wKgaomUD9VyAU5bHAAHfpsKlWps037.png

数据断点对于调试被应用破坏的标志和变量非常有用。一旦出现了读写访问,应用就会停止。另一种用法是堆栈溢出调查,只需要在堆栈大小的80-90%处设置一个数据断点,当溢出接近时,就可以停止应用,并一步步找到问题的根源。

数据日志断点

除了可监测读写访问的数据断点外,开发人员还可以使用数据日志断点。使用这些断点的目的是监测并以图形方式绘制特定变量或内存地址的值跟随时间的变化,这就能更轻松地比较多个变量,观察中断触发的情况。

wKgZomUD9V2AHLnrAAV_angN-5I587.png

仿真器选项提供了时间轴、附加数据日志和数据日志总结,如下图所示。

wKgaomUD9V-AZiYgAAYyA5osI7Q827.png

日志断点

除了代码断点和数据断点之外,开发人员还可以使用日志断点。这是一个特殊的断点,因为它只会暂时停止应用来打印一条信息。只有当断点被触发时,它才会显示选定的信息。

wKgaomUD9WCASNR7AAFDr06vm2s846.png

每当断点被触发,一条信息就会显示在调试日志窗口中。配合计数器,我们就可以知道应用源代码的特定部分运行了多少次。

wKgZomUD9WKAaQ_YAAUq-rA2vRE867.png

功率断点

得益于IAR Embedded Workbench的功率调试技术,开发人员可以监控能耗并将其与源代码联系起来。这使得了解整个应用的能耗成为可能。这个概念也使得添加功率断点成为可能。可以设置一个阈值,比如25mA,一旦能耗超过这个值,调试器就会中断。

wKgZomUD9WSANrKyAATlnlA3FZ0937.png

设置阈值的操作非常简单。只需要打开I-jet -> PowerLog window,然后设置数值和对应的操作。

wKgaomUD9WaAC2ioAAWN80pLyo4770.png

这个功能很有用,可以保证不出现任何耗电浪涌或高于指定值的情况,而且通过这种分析,电池的使用寿命也会延长,开发人员可以放心让其应用长时间运行。虽然时间轴窗口不是必须的,但它能提供实时的能耗信息。

Trace开始和停止断点

最后要介绍的是Trace开始和停止断点。如果开发人员使用先进的仿真器,比如I-jet Trace for Arm Cortex-M或I-jet Trace for Cortex-A/R/M,就可以利用这些断点。这在分析应用特定部分时特别有用。Trace开始和Trace停止断点简单易用,只需在代码行中右键点击并决定跟踪的开始和结束位置即可。Trace缓冲区将只保存应用中指定代码行之间的指令。

wKgZomUD9WiAf7EwAAXp76wa7p4056.png

另外,开发人员也可以从时间轴上的Trace指令中得到函数调用的图形概览,这些函数调用信息是在Trace开始和停止断点之间捕获的。

wKgaomUD9WmARwfYAAS7-b5SXOg351.png

虽然I-jet Trace仿真器比标准JTAG/SWD仿真器更强大,但有时如果记录包含所有正常信息时,Trace调试变得很麻烦。为了避免收集数以百万计的非必要指令,使Trace调试变得简单明了,IAR Embedded Workbench提供了Trace开始和停止断点的功能。

审核编辑:彭菁

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

    关注

    146

    文章

    16977

    浏览量

    350215
  • 数据
    +关注

    关注

    8

    文章

    6867

    浏览量

    88800
  • 编程
    +关注

    关注

    88

    文章

    3587

    浏览量

    93578
  • 程序
    +关注

    关注

    116

    文章

    3773

    浏览量

    80830
收藏 人收藏

    评论

    相关推荐

    如何充分利用各种类型断点

    代码断点是最简单的断点开发人员只需要选择C代码或者反汇编窗口中的ASM指令并设置断点即可。一旦断点被触发,程序就会暂停。
    发表于 09-18 11:03 1569次阅读
    如何<b class='flag-5'>充分利用</b><b class='flag-5'>各种类型</b>的<b class='flag-5'>断点</b>

    让你的内存每秒都能充分利用:内存释放专家

    让你的内存每秒都能充分利用:内存释放专家
    发表于 06-01 18:45

    如何充分利用光纤配线箱?

    ,光纤配线箱为各种应用提供了更丰富的功能和更灵活的布线环境。选择正确的光纤配线箱,充分利用光纤配线箱至关重要。下面我将告诉大家如何在数据中心里充分利用光纤配线箱,使布线环境更为灵活。灵活布线
    发表于 09-13 15:59

    如何充分利用这些频谱资源

    之前的文章(《如何实现比4G快十倍?毫米波技术是5G的关键》)我们介绍了如何利用毫米波技术获得更多的频谱资源,接下来的问题是如何充分利用这些频谱资源——如何让多个用户通讯但又互不干
    发表于 07-11 07:09

    XC7K325T FPGA如何充分利用GTX资源?

    嗨,我需要在XC7K325T FPGA充分利用GTX资源。结果,我必须以这种方式使用一个四边形,它的两个频道应该服务于10Gb / s链路和另外两个--1Gb / s链路。这意味着,两个通道必须
    发表于 07-22 13:25

    开关电源转换器如何充分利用SiC器件的性能优势?

    开关电源转换器,如何充分利用SiC器件的性能优势?
    发表于 02-22 07:16

    如何充分利用电子设计工具呢

    电子设计人员使用的工具箱日新月异。要找到适合工作的工具,不仅需要了解手头上的任务和现有工具,还要知道如何充分利用这些工具。对于设计人员来说,隔离栅内移动信号和电源是一项常见的挑战。为了提高
    发表于 12-31 06:42

    各种类型电容器的比较

    各种类型电容器的比较 频率的特性
    发表于 02-10 11:49 1096次阅读
    <b class='flag-5'>各种类型</b>电容器的比较

    并行编程无进展使多核芯片未能充分利用

    并行编程无进展使多核芯片未能充分利用 《福布斯》文章指出,为什么应用软件总是无法充分利用芯片的强大功能呢?如何充分有效地利用
    发表于 04-01 16:43 721次阅读

    充分利用超级大写电脑

    充分利用超级大写电脑
    发表于 05-21 19:04 0次下载
    <b class='flag-5'>充分利用</b>超级大写电脑

    方舟开发框架容器类的各种类型

    属性的限制,让每种类型的数据都能在完成自身功能的基础上剪除冗余分支,保证了数据的高效访问,提升了应用的性能。本期,我们将为大家介绍方舟开发框架容器类的各种类型以及相关API的使用。
    的头像 发表于 03-14 13:45 1542次阅读
    方舟<b class='flag-5'>开发</b>框架<b class='flag-5'>中</b>容器类的<b class='flag-5'>各种类型</b>

    各种类型的混频器及优缺点

    RF和微波设计,混频是信号链最关键的部分之一。今天我们就讲讲各种类型的混频器以及各自的优缺点。
    的头像 发表于 10-19 10:26 6390次阅读

    充分利用电位计 — 别让旋转乱套!

    充分利用电位计 — 别让旋转乱套!
    发表于 11-07 08:07 0次下载
    <b class='flag-5'>充分利用</b>电位计 — 别让旋转乱套!

    如何充分利用各种类型断点

    面向高可靠性应用开发MCU程序的过程,工程师通常会遇到设定断点的问题,断点的合理使用对于更好
    的头像 发表于 07-24 14:29 520次阅读
    如何<b class='flag-5'>充分利用</b><b class='flag-5'>各种类型</b>的<b class='flag-5'>断点</b>

    如何充分利用单片机(MCU)的非易失性存储器呢?

    如何充分利用单片机(MCU)的非易失性存储器 单片机(MCU)的非易失性存储器(NVM)是存储数据和程序的重要组成部分。它可以保留数据,即使断电或复位后也不会丢失。为了
    的头像 发表于 12-15 10:10 1298次阅读