关于STM32莫名死机的一些问题记录
扫描二维码
随时随地手机看文章
问题描述
ZET6跑了ucosII系统,在运行过程中有时会出现死机的情况,经过硬件调试发现,是进入延时的时候导致的这个问题,延时函数是没有问题的,而且这个问题是偶尔出现
问题排查死机之后指针指向了硬件错误中断,初步猜测是因为栈溢出,因为跑了系统,并且函数的嵌套层数比较多,导致栈内存不够,进入了硬件错误中断
解决方法将函数分离出来,减少函数嵌套,因为每一个函数都会分配单独的内存空间,所以多层的函数嵌套就会有多个函数空间,解决办法就是减少函数嵌套,这样当一个函数执行完弹栈之后,它的内存空间就会被释放。
其他资料使用keil编译程序的时候,会显示程序对内存的占用情况,其含义如下
Code为程序代码部分
RO-data 表示 程序定义的常量 const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量
Total RO Size (Code + RO Data)
Total RW Size (RW Data + ZI Data)
Total ROM Size (Code + RO Data + RW Data)
初始化时RW-data从flash拷贝到RAM
可以修改程序定义的堆栈大小
猜想因为申请了很多零时变量,可能需要调整Stack_Size
在STM32F10x.s文件中
修改Stack_Size EQU 0x00000200
成Stack_Size EQU 0x00000400