stm32cubeide在堆栈溢出时不提示错误
在测试代码时,看看栈空间是否足够。我发现在项目的.ld文件中,栈大小是这样定义的:_Min_Heap_Size = 0x200;_Min_Stack_Size = 0x400;我测试这个设置,当我超出定义的内存大小时,stm32cubeide是否会报错。我在一个函数内部声明了一个局部变量,并检查了栈指针。当我在main函数中调用这个函数时,栈指针似乎指向了其他地址,比如0x1FFFFFF6,这是代码段的内存区域,而不是SRAM。同样的情况也发生在中断服务程序(ISR)中声明局部变量时。问题是,为什么当我超出定义的栈大小时,stm32cubeide没有提示错误?
STM32 的 Cortex-M4 内核 不会自动检测堆栈溢出,除非手动配置监控。 高优化级别可能改变变量存储位置,导致堆栈使用情况与预期不符,但编译器不会报错。 链接脚本仅定义最小堆栈,不检查运行时溢出。 STM32 的堆栈从高地址向低地址增长,溢出时 SP 可能指向 非法地址。 可能是链接脚本配置错误。
页:
[1]