这两天遇到一个很奇怪的问题,在串口通信时串口缓冲区写指针出现异常改变,使用一个vu32的变量累积穿插中断产生的次数,发现该变量变化也异常。并且最终导致Hard_Fault。
一开始怀疑是数组越界,仔细检查没有发现数组访问越界的问题;后来怀疑是系统时钟配置或NVIC配置异常,检查后也没发现问题。
最后整理代码,删掉main函数开始的一个500字节的数组定义(该数组并没有使用到),程序恢复正常。
检查工程的linker配置,发现stack(栈)配置为0x0800(2048)Bytes,heap(堆)配置为0x0200(512)Bytes,所以在main函数中定义500字节数组很可能导致程序运行时堆空间溢出了。
大数组最好放在外部成全局变量,在函粒里定义成static型的0