今天调试的时候突然发现程序总是抛出这个异常
void HardFaultException(void)
{
while(1);
}
网上看见一篇文章:
我遇到的死机情况都是访问错误内存导致的。譬如说你定义了一个数组:int array[3],count=0;
你在程序中总是运行count++;而没有对count的值就行限制,结果count>=3;那么你访问array数组时用
array[count];那么程序就会出错,然后就会跑到void HardFaultException(void)这里。
我遇到的运行到void HardFaultException(void)的情况几乎都是类似的情况导致的。
所以一旦运行到void HardFaultException(void),首先要检查的就是是否出现访问内存的错误。
还有的就是所有被除能的fault都会上访成为hardfault
MemManage fault 存储器管理fault,MPU 访问犯规以及访问非法位置
总线 fault 总线错误(预取流产(Abort)或数据流产)
用法(usage) Fault
所以上面的这些fault如果被除能了就会上访成为hardfault
摘自:http://blog.sina.com.cn/s/blog_69871f290100jrwa.html
而我的错误就比较低级了,是因为我将一个开发板(核心芯片stm32103VC)上的程序放到另一块开发板(核心芯片stm32103ZET6),之前没有检查芯片选择以及相关设置。其实也是内存访问错误吧。
如果你想在线跟踪调试,在换开发板后你至少要做的检查是
第一 器件选择
第二 仿真设置