HardFault 一般解决方法

SCB->SHCSR |= 0x00070000;   // enable Usage Fault, Bus Fault, and MMU Fault

总线错误:

(1)当代码开始运行时,在Flash初始化之前如果对其擦写,会出现,

(2)如果在Flash 初始化过程中配置板子的时钟,会出现代码跑飞情况;比如一般配置时钟都是在flash_init函数之前,如果 flash_init函数中又出现配置时钟函数,那么在第二次配置完时钟后PC指针返回错误导致跑飞,

还有一种简单的,如删除存代码段的flash地址,也会出现跑飞情况

存储器管理错误:

(1)首先看map文件,我们生成的代码大小是否超过链接文件定义的地址大小,

(2)最有可能是栈分配问题,检查map文件中的数组,变量是否超过栈地址分配大小,数组越界可能性很小,较大已初始化数组建议声明为const类型

 

你可能感兴趣的:(IAR,HardFault)