近日為某個專案寫了個草稿程式,即非正式程式,後來發現老是進入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還要方便不少。本實驗完成的是輸入輸出重定向...