我的牙白 发表于 2025-7-7 10:22

stm32cubeide在堆栈溢出时不提示错误

在测试代码时,看看栈空间是否足够。我发现在项目的.ld文件中,栈大小是这样定义的:_Min_Heap_Size = 0x200;
_Min_Stack_Size = 0x400;我测试这个设置,当我超出定义的内存大小时,stm32cubeide是否会报错。我在一个函数内部声明了一个局部变量,并检查了栈指针。当我在main函数中调用这个函数时,栈指针似乎指向了其他地址,比如0x1FFFFFF6,这是代码段的内存区域,而不是SRAM。同样的情况也发生在中断服务程序(ISR)中声明局部变量时。问题是,为什么当我超出定义的栈大小时,stm32cubeide没有提示错误?

jcky001 发表于 2025-7-7 16:02

STM32 的 Cortex-M4 内核 不会自动检测堆栈溢出,除非手动配置监控。

elephant00 发表于 2025-7-7 16:03

高优化级别可能改变变量存储位置,导致堆栈使用情况与预期不符,但编译器不会报错。

cr315 发表于 2025-7-7 17:02

链接脚本仅定义最小堆栈,不检查运行时溢出。

flycamelaaa 发表于 2025-7-7 17:04

STM32 的堆栈从高地址向低地址增长,溢出时 SP 可能指向 非法地址。

powerantone 发表于 2025-7-7 19:04

可能是链接脚本配置错误。
页: [1]
查看完整版本: stm32cubeide在堆栈溢出时不提示错误