ARM Coretex-M核心单片机(STM32)找到hardfault的原因,与hardfault解决方法
1. 前提基础知识(ARM异常 压栈流程)M核栈增长是地址逐渐减小的
**M3h
ARM CM4核心带浮点处理器FPU的,压栈的东西还不一样
进入hardfult后看MSP或者SP的值,看下边第二章图如果hardfult里边啥都没有,就只有个while(1){} 可以用第二张图判断SP+20里边存储的就是LR寄存器的值,也就是产生hardfault前导致的问题的地方,把这个值像第一张图一样写给PC就能定位到因为哪里产生的hardfault,
现在还在推出来个类似的公式解决方法,发现函数里边写的东西越多函数栈指针会变化,也就不能直接取*(SP+24)|(SP+23)|(SP+22)|*(SP+21),拼凑出来的值就是LR的值可以直接赋值给PC,定义个函数指针给赋值了,在调用在hardfault里边直接就可以跳过去
还在研究公式化的方法