关于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

你可能感兴趣的:(stm32)