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

发布者:EE小广播最新更新时间:2021-09-18 来源: EEWORLD关键字:断点  MCU  程序  BUG  IAR  代码  仿真器 手机看文章 扫描二维码
随时随地手机看文章

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


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


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


代码断点

条件代码断点

具有读写访问的数据断点

数据日志断点

日志断点

功率断点

Trace开始和停止断点


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


代码断点


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

 

image.png


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

 

image.png


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


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

 

image.png


条件代码断点


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

 

image.png


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

 

image.png

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


具有读写访问的数据断点


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

 

image.png


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


数据日志断点


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

 

image.png


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

 

image.png


日志断点


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

 

image.png


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

 

image.png


功率断点


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

 

image.png


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

 

image.png


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


Trace开始和停止断点


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

 

image.png


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

 

image.png


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


关键字:断点  MCU  程序  BUG  IAR  代码  仿真器 引用地址:如何充分利用各种类型的断点

上一篇:3D芯片堆栈技术向数据中心抛媚眼
下一篇:分布式

推荐阅读最新更新时间:2024-11-17 04:41

51单片机读写max186的c51程序
//ad转换子程序 //返回的是12位的int型数据 //max186通道ch0对应的是0,它是max186第1脚 //max186通道ch1对应的是1,它是max186第2脚 //max186通道ch2对应的是2,它是max186第3脚 //max186通道ch3对应的是3,它是max186第4脚 //max186通道ch4对应的是4,它是max186第5脚 //max186通道ch5对应的是5,它是max186第6脚 //max186通道ch6对应的是6,它是max186第7脚 //max186通道ch7对应的是7,它是max186第8脚 //比如:int ch3; // ch3=ad186(3); //ch3就是从max
[单片机]
51<font color='red'>单片机</font>读写max186的c51<font color='red'>程序</font>
基于STR7 ARM微控制器的IRQ中断防御体系
1 引言 ARM7TDMI体系的中断向量的地址是动态分配在中断向量控制器的寄存器中,例如,意法半导体(ST)公司生产的STR71x系列ARM微控制器,其增强型的中断控制器(EIC)的EIC_IVR寄存器(中断向量寄存器)、EIC_SIRn寄存器(源中断寄存器)都是用于存储相关中断通道的中断服务程序在存储器中的地址,内核响应IRQ中断后,再根据当前对应的中断通道的中断向量进行散转,执行相应的中断服务程序。对于一般的8位MCU,通常是将向量中断人口固定分配ROM中,例如MCS-51单片机各个中断的人口地址是固定的。两者相比,ARM的中断体系具有较大的灵活性,但却降低了安全性和可靠性;MCU的中断向量体系虽然失去了灵活性,但确保了系统
[单片机]
基于STR7 ARM<font color='red'>微控制器</font>的IRQ中断防御体系
单片机显控系统中的汉字输入
摘 要:在实际应用中,特别是在需要实时大量输入汉字的显控处理应用中,利用传统单片机显控设计方法是无法实现的;通过对汉字内码的分析,给出硬件汉字库的制作方法,提出针对一、二级汉字库编码检索的拼音输入检索方法, 利用Philips P89C51R D2单片机为核心处理芯片,设计一种具有通过键盘用汉语拼音输入法输入汉语拼音, 利用相应程序通过编码检索,在显控系统中实时输入汉字,并在LCD上显示或通过RS 232串口输出汉字点阵数据的方法。 关键词:P89C51RD2;汉语拼音;汉字库;LCD;C51 对于PC机来说,输入汉字是非常简单的,但在一些单片机人机接口系统中,进行汉字的实时输入是很困难的,而大多只能显示事先已取好字
[应用]
微处理器与单片机的区别
微处理器: 计算机系统核心部件(CPU)并不是一台完整的计算机 单片机: 将CPU和其它接口电路集成在一个芯片之中,使其具有计算机的基本功能。 从上面的描述可知,微处理器只是一个CPU,而单片机则是由CPU与其它的接口电路组合而成的,所以CPU不等于单片计算机。也可以这样说,CPU只是计算机其中的一个部件而已。
[单片机]
MC9S08DZ60单片机测量时间的问题
1.问题描述 用DZ60的计时器测周期时发现,TPM(计时器)在初始化后,需要等待500多ms才能勉强测到。 TPM产生的波形如下图,蓝色波形上升沿为初始化指令执行完成时间点,用一个IO口输出高电平并延时100ms作为示波器触发源,黄色波形为TPM的PWM方式输出波形。 2.问题分析 在DZ60DATASHEET中文版第313页找到这段话。 大概意思是TPM的通道控制寄存器的更新时机由clksb:clksa控制。而clksb:clksa的功能如表16-3所示。 合起来就是说,对通道控制寄存器的写入,不是直接写到寄存器里面,而是先写到寄存器对应的缓冲器。当TPM计数器关闭时,写入的数据从缓冲器写入完成后立即更
[单片机]
MC9S08DZ60<font color='red'>单片机</font>测量时间的问题
S3C2440 nor_flash驱动程序
和前面的nandflash差不多,我们此处来重新学习一下norflash驱动。 1 /* 2 * 参考 driversmtdmapsPhysmap.c 3 */ 4 5 #include linux/module.h 6 #include linux/types.h 7 #include linux/kernel.h 8 #include linux/init.h 9 #include linux/slab.h 10 #include linux/device.h 11 #include linux/platform_device.h 12 #include linu
[单片机]
盛群发布无线吸尘器 ASSP Flash MCU
盛群(Holtek)推出全新的无线吸尘器 ASSP Flash MCU--HT45F0084,内建硬件过 电流/过电压/欠电压保护,针对电机与电池提供完整的保护,也可节省外围零件, 非常适合开发无线吸尘器中的直流有刷电机机种。 HT45F0084 拥有 12-bit ADC 用来实现电池电量侦测、电池充电管理、电池温度 监控、适配器电压侦测等产品功能,2 组硬件过电流保护,分别用来进行地刷小 电机的堵转/过电流保护、吸气大马达的堵转/过电流保护,以及电池充电过电流 保护,拥有 1 组 10-bit STM 用于地刷小电机控制,1 组 10-bit PTM 用于实现吸 气大马达控制。 HT45F0084 封装规格为 16-pin N
[半导体设计/制造]
MCU/DSP/FPGA呈现多元化发展趋势
MCU凭借其强大的控制功能,广泛地用于消费类电子、通信、汽车电子、工业等领域。有资料显示,MCU产品需求量每年不断增长,2008年全球MCU市场将增长到160亿美元。DSP则以其卓越的数据处理能力以及优秀的数据算法,成为数字信息时代的核心引擎。来自市场调研机构IC Insights的数据显示,2006年全球DSP市场将增长9%,达到85亿美元,2007年将以18%的速度增长,2008年则达27%。 而FPGA更是以其极大的灵活性、丰富的接口和优越的性能著称,利用FPGA可以实现任何数字器件的功能。据市场调研公司Gartner Dataquest预测,2010年FPGA和其他可编程逻辑器件(PLD)市场将从2005年的3
[新品]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved