STM32之程式如何防止堆疊溢位

2021-06-19 23:31:54 字數 434 閱讀 2268

近日為某個專案寫了個草稿程式,即非正式程式,後來發現老是進入hardfaulthandler,原來是堆疊溢位,後仔細檢視發現函式呼叫縱深太深,最多的時候可保持7個函式在堆疊中呼叫。

因此有心得如下:

一、函式呼叫不要縱深太深,即以下模式:

main()

fun1()

fun2()

fun3()

fun4()

fun5()

fun6()

這樣子main函式要呼叫fun1函式完成某個功能,則要一直調到fun7為止,才能完成。這樣導致堆疊中最多時要儲存著main和fun1至fun7的所有資訊,可能會導致堆疊溢位。

所以最好是不要呼叫太深。

二、區域性變數不要太大太多,如區域性陣列,超過某個數量需定義為全域性陣列,因為區域性陣列同樣儲存在堆疊中。

STM32學習筆記之堆疊空間

1.堆和棧大小 定義大小在startup stm32f2xx.s stack size equ 0x00000400 area stack,noinit,readwrite,align 3 stack mem space stack size initial sp heap configuratio...

STM32 程式入口

stm32的啟動需要依賴啟動檔案,不同編譯器的啟動檔案不同,這裡以startup stm32f407xx.s為例,它主要進行了以下工作 復位子程式是系統上電後第乙個執行的程式 reset handler reset handler proc export reset handler weak imp...

STM32之串列埠

名稱 stm32之串列埠 說明 對於stm32的串列埠通訊來說,從外部看,和c51差不多。從內部看,啊。我還不了解。從使用上說,也是需要先配置usart,然後通過終端或者輪詢的方式接受或者輸出資料。由於有了韌體庫函式的幫助,stm32的串列埠配置起來比c51還要方便不少。本實驗完成的是輸入輸出重定向...