收藏 分销(赏)

Cortex-M3 内核HardFault错误调试定位方法.docx

上传人:pc****0 文档编号:8733624 上传时间:2025-02-28 格式:DOCX 页数:4 大小:447.48KB
下载 相关 举报
Cortex-M3 内核HardFault错误调试定位方法.docx_第1页
第1页 / 共4页
Cortex-M3 内核HardFault错误调试定位方法.docx_第2页
第2页 / 共4页
点击查看更多>>
资源描述
Cortex-M3 内核HardFault错误调试定位方法 1、首先更改startup.s的启动文件,把里面的HardFault_Handler代码段换成下面的代码: HardFault_Handler\ PROC IMPORT hard_fault_handler_c TST LR, #4 ITE EQ MRSEQ R0, MSP MRSNE R0, PSP B hard_fault_handler_c ENDP 2、然后把hard_fault_handler_c函数放在c文件的代码中。代码如下: void hard_fault_handler_c(unsigned int * hardfault_args) { static unsigned int stacked_r0; static unsigned int stacked_r1; static unsigned int stacked_r2; static unsigned int stacked_r3; static unsigned int stacked_r12; static unsigned int stacked_lr; static unsigned int stacked_pc; static unsigned int stacked_psr; static unsigned int SHCSR; static unsigned char MFSR; static unsigned char BFSR; static unsigned short int UFSR; static unsigned int HFSR; static unsigned int DFSR; static unsigned int MMAR; static unsigned int BFAR; stacked_r0 = ((unsigned long) hardfault_args[0]); stacked_r1 = ((unsigned long) hardfault_args[1]); stacked_r2 = ((unsigned long) hardfault_args[2]); stacked_r3 = ((unsigned long) hardfault_args[3]); stacked_r12 = ((unsigned long) hardfault_args[4]); /*异常中断发生时,这个异常模式特定的物理R14,即lr被设置成该异常模式将要返回的地址*/ stacked_lr = ((unsigned long) hardfault_args[5]); stacked_pc = ((unsigned long) hardfault_args[6]); stacked_psr = ((unsigned long) hardfault_args[7]); SHCSR = (*((volatile unsigned long *)(0xE000ED24))); //系统Handler控制及状态寄存器 MFSR = (*((volatile unsigned char *)(0xE000ED28))); //存储器管理fault状态寄存器 BFSR = (*((volatile unsigned char *)(0xE000ED29))); //总线fault状态寄存器 UFSR = (*((volatile unsigned short int *)(0xE000ED2A)));//用法fault状态寄存器 HFSR = (*((volatile unsigned long *)(0xE000ED2C))); //硬fault状态寄存器 DFSR = (*((volatile unsigned long *)(0xE000ED30))); //调试fault状态寄存器 MMAR = (*((volatile unsigned long *)(0xE000ED34))); //存储管理地址寄存器 BFAR = (*((volatile unsigned long *)(0xE000ED38))); //总线fault地址寄存器 while (1); } 3、执行程序后,若发生内核错误,则程序会运行到最后的while(1)处。此时观察相应的堆栈和故障寄存器值, stacked_lr即为故障发生时进入故障中断前pc的值,在MDK软件调试状态下,假如stacked_lr的值为0x1A002D08,在左下方的命令窗口输入“pc = 0x1A002D08”,回车,即可定位发生错误的代码位置。 4、根据内核错误状态寄存器的值,对应下面的说明,也可以看出是发生了何种内核错误。 附录:Cortex-M3内核错误寄存器说明
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服