最近經常有工程師詢問,使用我們的MCU時,如何知道當前使用的堆疊大小情況呢?針對這個問題,我也在網上查閱了一些方法,對比來看,使用填充法是最直觀的。我這邊透過使用新唐M480來編寫程式,計算當前堆疊使用情況,各位有更好的方法也歡迎推薦給我,三人行必有我師焉。
1、首先確認目前設定的堆疊區域大小,例如在啟動文件中設定為0x800,這個大小可以根據實際使用情況進行調整。
2、在進行調試時,設計的最佳化等級應設置為最高,以方便調試和驗證。
3、堆疊的使用是從堆疊頂端地址向下使用的,所以我們需要確認一下堆疊頂端地址。這可以透過 debug 查看 SP 指針地址,這個就是堆疊頂端地址。
4、定義堆疊頂部和堆疊底部地址
堆疊頂部地址 = 堆疊底部地址 + 堆疊大小
5、在堆疊空間填入固定資料,方便後續查看堆疊使用情況
6、撰寫計算堆疊使用情況的函數
7、驗證
賦初值地址範圍:0x20000038 - 0x20000838 寫入 0x11111111
8、執行程序
9、列印日誌
查看發現使用的地址範圍是 0x20000770 - 0x20000838,計算實際使用是 200 個字節,符合 log 結果。這裡要注意一下,我是單步執行的,如果在計算程序下面增加其他程序,那這個結果就會不準確,最直觀的方法是通過 debug 去查看哪些空間未使用。
=
參考來源