广告

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

2021-09-18 IAR 阅读:
软件开发者在调试时离不开断点,但如何最好地利用断点呢?本文将指导开发人员如何利用每一个可用的断点来更快地调试程序。

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

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

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

  • 代码断点
  • 条件代码断点
  • 具有读写访问的数据断点
  • 数据日志断点
  • 日志断点
  • 功率断点
  • Trace开始和停止断点

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

代码断点

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

f6Xednc

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

f6Xednc

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

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

f6Xednc

条件代码断点

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

f6Xednc

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

f6Xednc

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

具有读写访问的数据断点

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

f6Xednc

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

数据日志断点

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

f6Xednc

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

f6Xednc

日志断点

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

f6Xednc

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

f6Xednc

功率断点

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

f6Xednc

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

f6Xednc

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

Trace开始和停止断点

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

f6Xednc

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

f6Xednc

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

  • 非常好的资料文档
本文为EDN电子技术设计 原创文章,禁止转载。请尊重知识产权,违者本司保留追究责任的权利。
  • 微信扫一扫
    一键转发
  • 最前沿的电子设计资讯
    请关注“电子技术设计微信公众号”
  • Ignion选用AWS云服务来变革物联网设计流程 Ignion宣布推出天线设计智能云服务Antenna Intelligence Cloud,该服务将云计算和人工智能功能引入到天线领域。
  • 台积电、联电校招万人,业内人士:行业薪资达十年来最高水 近日,台积电、联电开启了校招活动,其中,台积电预计招募超过8000名新员工、联电预计招募 2000 名人才,硕士毕业工程师平均年薪上看200万新台币,约合人民币45万元。晶圆厂们大手笔扩招源于晶圆厂们2021年的“疯狂”扩产。
  • HT7181 3.7V/7.4V升16V内置MOS大功率升压IC解决方案 深圳市永阜康科技有限公司针对升压值18V以下的DC-DC升压应用需求,推广一款集成14A开关管的17.8V输出、大电流非同步DC-DC升压IC:HT7181。
  • 被二十余家科技巨头“制裁”,俄罗斯反击:停供美国火箭发 随着俄罗斯与乌克兰冲突的持续升级,以美国为首的北约成员国和欧洲国家纷纷对俄罗斯宣布制裁,不少科技行业也加入了制裁俄罗斯的队伍。如英特尔、AMD断供,苹果在俄停售,美国社交平台“禁言”俄罗斯媒体、甲骨文、SAP等云巨头停服俄罗斯等,但值得一提的是,俄罗斯也进行了反击。不仅停止了向美国交付火箭发动机,终止两国在国际空间站的实验合作,还启用本国互联网 Runet。
  • 英特尔、AMD、Arm等九大企业宣布UCIe开放标准,推动Chip 英特尔、AMD、Arm 和所有领先的代工厂商齐聚一堂,包括高通、三星、台积电、日月光,以及Google Cloud、Meta、微软,宣布他们正在为小芯片互连制定一个新的开放标准Universal Chiplet Interconnect Express (UCIe),希望以UCIe 1.0规范建立芯片互连、兼容运作,让更多业者能依照此标准打造新款处理器,并且能配合不同微芯片建构差异化设计。
  • “中国IC设计成就奖”提名产品简介:IVCR1401 35V 4A Si IVCR1401是一款4A单通道高速智能栅极驱动器,能够高效,安全地驱动SiC MOSFET和IGBT, 对比传统的栅极驱动,8引脚设计更简洁,使用更方便,能大大节约开发时间成本。
  • “中国IC设计成就奖”提名产品简介:显示触控一体化驱动 集创北方研发的显示触控一体化驱动芯片(TDDI)突破了CDMA抗干扰技术、驱动控制与触控侦测分时复用全驱动技术、减光罩、低功耗等前沿技术,形成了TDDI特有的显示横纹 (Hline)解决方案
  • “中国IC设计成就奖”提名产品简介:高可靠性隔离式双通 纳芯微NSi6602-Q1是国内首款车规级高压隔离半桥驱动芯片,该芯片集高隔离耐压、高可靠性、高集成度、低延时、灵活封装配置等特性于一体,可应用在车载电源OBC/DCDC、车载电驱、充电桩、光伏储能、数字电源等泛能源重点发展领域。
  • Microchip模拟嵌入式SuperFlash技术助力存算一体创新 SuperFlash memBrain存储器解决方案使知存科技片上系统(SoC)能够满足最苛刻的神经处理成本、功耗和性能要求
  • “中国IC设计成就奖”提名产品简介:数字隔离器Pai122M3 荣湃数字隔离器产品采用自主知识产权的智能分压技术开发设计而成,相比同类隔离产品,该专利技术可以实现更低的功耗,更高的速率和更优的时序特性。智能分压技术相比传统隔离传输技术,采用更简洁的电路架构实现更优的隔离传输性能,采用智能分压锁存放大模块电路,替代传统架构中的高频发生电路,高频调制电路和高频解调三部分电路,因此芯片面积只有传统架构芯片面积的1/2~1/3。
  • “中国IC设计成就奖”提名产品简介:集成隔离电源的隔离 CA-IS3062W是川土微电子在2020年12月推出的一款隔离式控制区域网络(CAN)物理层收发器,同时内部集成隔离式DC-DC转换器。符合ISO11898-2标准的技术规范。此器件采用片上二氧化硅(SiO2)电容作为隔离层,在CAN协议控制器和物理层总线之间创建一个完全隔离的接口,配合内部集成的隔离式DC-DC,可隔绝噪声和干扰并防止损坏敏感电路。
  • “中国IC设计成就奖”提名产品简介:45W氮化镓超快墙充B 45W氮化镓超快墙充,采用纳微快充芯片内嵌,足够小的体积,7月初上线京东众筹,成功众筹20万金额,以其直充笔记本,手机充电更快,使用各种使用场景受到用户的喜欢和高度肯定。
广告
热门推荐
广告
广告
EE直播间
在线研讨会
广告
广告
面包芯语
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了