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