最近遇到一个当时看来无法理解的问题:当调用一个函数后在函数执行过程中一切正常,但是只要函数执行完成后要返回时就会触发HardFault异常中断,时间过去了好几天了记得当时好像是提示内存地址异常还是啥来着,具体记不清了。之前我也遇到过类似的HardFault问题后面发现是一个临时变量的数组太长了导致堆栈溢出了,现象就是只要操作这个数组就会触发HardFault,但这次的情况却不尽相同:函数执行过程中并没有触发HardFault,而是在函数将要返回时触发HardFault,一时让我无所适从。后面抱着死马当活马医的心态还是决定找一找函数中的数组有没有问题,结果发现果然还是有一个数组写入存在越界的问题改正之后HardFault问题解决!
那么为啥这次没有在操作函数越界时触发HardFault,而是在函数返回时才触发HardFault?在此我强行给个解释(不一定对):应该是发生数组越界时破坏了系统的堆栈数据,在函数执行中并不会用到这些数据所以不会影响到函数的执行,但是当函数返回要出栈了这时错误的数据就被系统调用了所以才会触发HardFault。如果分析的不对希望高人指正。