当前位置:首页 > 单片机 > 单片机
[导读]1 Cortex-M3/4的Fault简介 Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。常见的4种异常及产生异常的情况如下:Bus Fault:在fetc

1 Cortex-M3/4的Fault简介

Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。常见的4种异常及产生异常的情况如下:

Bus Fault:在fetch指令、数据读写、fetch中断向量或中断时存储恢复寄存器栈情况下,检测到内存访问错误则产生Bus Fault。

Memory Management Fault:访问了内存管理单元(MPU)定义的不合法的内存区域,比如向只读区域写入数据。

Usage Fault:检测到未定义指令或在存取内存时有未对齐。还可以通过软件配置是否检测到除0和其它未对齐内存访问也产生该异常,默认关闭,需要在工程初始化时配置:

SCB->CCR|=0x18;//enablediv-by-0andunalignedfault

Hard Fault:在调试程序过程中,这种异常最常见。上面三种异常发生任何一种异常都会引起Hard Fault,在上面的三种异常未使能的情况下,默认发生异常时进入Hard Fault中断服务程序。使能前三种异常也要在初始化时配置:

SCB->SHCSR|=0x00007000;//enableUsageFault,BusFault,andMMUFault

在默认复位初始化时,Hard Fault使能,其它三者不使能,因此当程序中出现不合法内存访问(一般是指针错误引起)或非法的程序行为(一般就是数学里面常见的除0)时都将产生Hard Fault中断。

2 Hard Fault调试方法

假设IDE环境为Keil,芯片为STM32F103。

在stm32f10x_it.c中,添加软件断点,一旦调试时出现Hard Fault则会在停在__breakpoint(0)处。

/**

*@briefThisfunctionhandlesHardFaultexception.

*@paramNone

*@retvalNone

*/

voidHardFault_Handler(void)

{

/*GotoinfiniteloopwhenHardFaultexceptionoccurs*/

if(CoreDebug->DHCSR&1){//checkC_DEBUGEN==1->DebuggerConnected

__breakpoint(0);//haltprogramexecutionhere

}

while(1)

{

}

}



当进入Hard Fault断点后,菜单栏Peripherals >Core Peripherals >Fault Reports打开异常发生的报告,查看发生异常的原因。


上面的报告发生了BUS FAULT,并将Fault的中断服务转向Hard Fault。



相对于检测发生了什么异常,定位异常发生位置显得更重要。
(1)打开Call Stack窗口(如下图左侧,断点停在Hard Fault服务程序中)


(2)在Call Stack的HardFault_Handler上右键Show Caller Code(有的Keil版本也可以直接双击)


这时将跳转到发生异常的源代码位置(如上图),异常发生在p->hour=0这一行。这里错误很明显:指针p尚未为成员变量分配内存空间,直接访问未分配的内粗空间肯定出错。


再说明2点:
[1] 在复杂的情况下,即使定位了异常发生位置也很难容易的改正错误,要学会使用Watch窗口对发生错误的指针变量进行跟踪;
[2] 在问题不明晰的情况下,尝试分析反汇编代码,就自己遇到的,部分情况下的异常发生在BL等跳转指令处,BL跳转到了不合法的内存地址产生异常

Refrences:

[1]Application Note 209.Using Cortex-M3 and Cortex-M4 Fault Exceptions.

[2]Cortex-M3权威指南


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

通常对某个频点上的阻抗匹配可利用SMITH圆图工具进行,两个器件肯定能搞定,即通过串并联电感或电容即可实现由圆图上任一点到另一点的阻抗匹配,但这是单频的。而手机天线是双频的,对其中一个频点匹配,必然会对另一个频点造成影响...

关键字: 天线 阻抗匹配 调试方法 BSP

比例系数的调节比例系数P的调节范围一般是:0.1--100。如果增益值取 0.1,PID 调节器输出变化为十分之一的偏差值。如果增益值取 100, PID 调节器输出变化为一百倍的偏差值。

关键字: PID 参数整定 调试方法

9月16日消息,苹果秋季新品发布会如期举行,虽然iPhone 12没有登场,但是苹果发布了两款全新的iPad: iPad Air 4和iPad 8。 作为本次发布会的C位,iPad的业绩当然会被拿出来赞誉一番。

关键字: 苹果 库克 ipad air 4 8

今日凌晨,iPad Air 4正式发布。 小米集团智能硬件部总经理刘新宇借此安利自家的小米WiFi 6路由器。刘新宇表示,iPad Air 4需要WiFi 6路由器搭配才能释放全部潜力,雷总8.11发布会上再次强烈推荐...

关键字: ipadi pad air 4

DJI大疆创新今天发布了其第四代手机云台产品,定名为“DJI OM 4”,采用了创新的磁吸快拆设计,瞬间就能装好手机并稳定开拍。 DJI OM 4有两种方式安装手机,一是磁吸手机夹,夹上后不影响手机正

关键字: 大疆 手机云台 dji om 4 磁吸

8月26日,大疆创新发布全新手机云台DJI OM 4 ,首次突破性地采用了磁吸快拆设计,结合强大的智能功能和领先的三轴云台技术,实现了更流畅、更优质的日常拍摄。 我们快科技已经拿到了这款云台,下面为大

关键字: 大疆 dji om 4 图赏 磁吸快拆

9月11日,据外媒报道,部分网友在Reddit上晒出了Pixel 3系列电池鼓包的照片,电池已经把手机后盖顶起。 不少网友在谷歌论坛和Reddit反映谷歌Pixel 3、Pixel 4系列机型电池鼓包问题。

关键字: pixel 3 xl 4

  2月22日消息,Ubuntu移动操作系统Ubuntu Touch今天开放下载,首批支持的机型有Galaxy Nexus、Nexus 4、Nexus 7和Nexus10。   按照Ub

关键字: ubuntu nexus 4

  最新低成本、低功耗PSoC 4系列采用ARM® Cortex™-M0内核,   同时拥有PSoC的可编程性、模拟性能和高集成度   赛普拉斯半导体公司日前

关键字: 4 capsense psoc 电容式触摸技术 赛普拉斯

  全球领先的整合单片机、混合信号、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)今日于2015香港春季电子

关键字: 4 jukeblox Microchip
关闭
关闭