一、故障复现
今天移植一个函数stm32中遇到了一个问题,系统不定时的会进入HardFault_Handler 中断函数调。经过调试系统有时会在运行到 idelete[i] = 0;时进入HardFault_Handler中断函数。
二、排查过程
经过排查发现系统在malloc后没有添加判断是否开辟成功,添加判断函数后发现有的时候空间并没有开辟成功。在后续向里面写数据的时候会进入HardFault_Handler函数。
三、原因分析
查看stater_stm32f103xe.s 文件发现堆区空间只有200怀疑是堆区空间太小导致malloc失败。把 Heap_Size改为1000,后调试问题得意解决。
Heap_Size EQU 0x1000
四、举一反三
堆区空间太小导致malloc失败,如果每次开辟的空间大小不一样的话,会导致程序会在不同的地方进入中断 HardFault_Handler 中断函数。
五、问题处理
如果开辟的空间比较大的话提前看一下空间是否足够,每次开辟空间一定要进行free,一个malloc对应一个free。