在STM32中,SRAM划分通常通过链接脚本(如GCC的.ld文件或Keil的.sct)实现。典型布局:从低地址到高地址依次为.data(已初始化全局变量)、.bss(未初始化全局变量)、堆(heap)和栈(stack)。堆栈大小需在启动文件或链接脚本中定义,例如GCC中通过`_Min_Heap_Size`和`_Min_Stack_Size`宏设置。实操建议:1) 栈向下增长,堆向上增长,两者之间留出保护间隙,防止溢出;2) 用`__attribute__((section(".bss")))`将大数组放入外部SRAM(如F407的CCM),但注意DMA访问限制;3) 在启动文件里检查栈顶指针(如`__initial_sp`)是否越界,可加看门狗或栈填充模式(0xCC)检测溢出。建议堆大小设为总SRAM的10-20%,栈按任务深度估算,避免浪费。
mcuku 阿沐 · 2026-08-20