STM32 堆栈溢出导致程序跑飞


在开发STM32程序的时候,如果局部变量较多,应该时刻注意堆和栈的占用情况,今天出现的BUG就是因为没有注意导致的。

看下面的代码

// main.c
void func()
{
	double x[1024];
	// some code
}

// startup_stm32f407xx.s
Stack_Size		EQU     0x800
// 中间省略
Heap_Size      EQU     0x800

func是我在main文件中定义的某个函数,然后在main函数中调用了它,startup_stm32f407xx.s是stm32初始化文件,用汇编写的,里面可以查询到堆区和栈区的大小。
我们知道局部变量创建在栈区,我们设置的栈区大小为0x800,也就是2048Byte,一个double类型占用8个字节,函数申请了一个1024个元素的double数组,这很明显就已经超出了堆栈范围,所以程序运行直接崩溃。

我的解决办法是把占用内存多的变量申请在全局区,这样程序在编译的时候会自动计算需要的空间,这样就不会出错了。

另一种办法是修改堆栈大小,这种方法我还没试过,因为我不清楚堆栈可以设置的上限是多少,如果有知道的大佬还希望能在评论区指教以下。小弟在这先谢谢了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM