IAR STM32 最大堆棧分析

IAR有相關選項,編譯完成後,自動分析最大堆棧深度,並將分析結果放在map文件中。

具體操作如下:

01
堆棧使用理論分析
1、通過下方路徑選項勾選,使能堆棧理論分析。
Project > Options > Linker > Advanced > Enable stack usage analysis
2、堆棧使用情況的理論分析結果會保存在map文件中的“STACK USAGE”段,因此還需要勾選
Linker->List->Generate linker map file選項,以生成map文件。
3、在map文件中找到“STACK USAGE”段,理論分析結果中,應用程序Program entry和中斷interrupt的堆棧使用是分開的,且提供了這兩者的堆棧最大使用數值Max Use和總共的堆棧使用數值Total Use。
4、通過理論分析結果計算合理的堆棧空間以設定其大小,計算公式如下:
CSTACK Size >= maxstack(“Program entry”) + totalstack(“interrupt”) + safety margin(100);
需要設定的堆棧空間大小等於應用程序的最大堆棧使用加上中斷服務程序的最大堆棧使用(假設所有的中斷同時發生),再加上100字節的預留空間。
5、若應用程序中包含遞歸調用函數、函數指針間接調用等,還需要額外提供理論分析控制文件指定遞歸層數和間接調用的函數等,控制文件的具體使用請參閱閱讀原文中的“IAR C/C++ Development Guide”手冊。
02
堆棧空間大小觀察窗口
除了堆棧使用理論分析功能外,IAR還提供了觀察窗口,在調試過程中可視化應用程序實際堆棧使用。
1、通過Tools > Options > Stack > Enable graphical stack display and stack usage tracking使能堆棧跟蹤和可視化分析功能。
2、進入調試界面後,通過View->Stack打開Stack觀察窗口,程序運行一段時間後,手動或由斷點讓程序暫停運行,stack窗口將顯示應用程序運行到當前位置的實際堆棧使用情況。

鼠標移動到stack進度條位置時,將顯示具體的堆棧使用信息。其中灰色部分代表開始運行到當前斷點時刻已使用的最大堆棧空間,綠線位置代表當前斷點時刻的堆棧指針,淺灰色部分代表未使用的堆棧空間。Stack窗口還顯示當前堆棧指針地址和內容等信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章