2024年2月20日发(作者:)

STM32 分配堆栈空间不足问题原因及解决方法

在开发过程中,我们有时候可能会遇到数据错误的情况,而这个情况

发生多数是由于堆栈溢出导致,这里我们将详细讲解复现堆栈溢出会导致的

问题及提供相应的解决方法。

先说结论,以 STM32F103RCT6 为例,初始的栈空间是 1KB,堆空

间是 512Byte。如果动态内存分配需求过多时,需要手动调节堆空间。在启

动文件 startup_stm32f103xe.s 的开头就可以设置堆栈空间大小。同样,在

STM32CubeMX 中也可对堆栈大小进行修改,在 Project -》 SetTIngs 选项中

可以对 Minimum Heap Size 大小进行更改。扩大之后即可解决堆栈空间不足

的问题。

遇到的问题

今天在 STM32F103RCT6 上,使用 malloc() 为链表分配内存空间

时,忽然遇到一次分配内存过多而死机的问题。查阅官方文档发现此型号的

单片机 FLASH 256KB,RAM 48KB。我链表的结构体定义如下:

typedef struct LNode{