問題
IAR中默認(rèn)的入口函數(shù)是__iar_program_start,使能stack usage analysis之后:

生成的map文件中STACK USAGE章節(jié)里面會(huì)包含Program entry的stack使用相關(guān)信息:

如果對(duì)應(yīng)啟動(dòng)代碼沒有使用默認(rèn)的入口函數(shù)__iar_program_start,需要使用--entry鏈接器選項(xiàng)指定對(duì)應(yīng)的入口函數(shù)(以使用入口函數(shù)Reset_Handler為例):

但是使能stack usage analysis之后,生成的map文件中STACK USAGE章節(jié)里面沒有包含Program entry的stack使用相關(guān)信息:


原因
正常來說,編譯器可以生成每個(gè)函數(shù)的調(diào)用和stack使用信息,鏈接器可以計(jì)算出每個(gè)根函數(shù)的最大stack使用。但是如果源代碼是用匯編寫的,那么對(duì)應(yīng)函數(shù)的調(diào)用和stack使用信息需要用戶指定(如果用戶不指定,鏈接器沒有辦法知道對(duì)應(yīng)的信息,從而沒有辦法計(jì)算出對(duì)應(yīng)的最大stack使用)。

解決辦法
需要在對(duì)應(yīng)的stack usage control file (suc)里面指定對(duì)應(yīng)的函數(shù)調(diào)用和stack使用信息:

對(duì)應(yīng).suc文件中指定對(duì)應(yīng)的信息:
/* Specify Reset_Handler as the Program entry */ call graph root ["Program entry"]: Reset_Handler; /* Specify Reset_Handler will call SystemInit and __iar_program_start */ function Reset_Handler: 0, a calls SystemInit, calls __iar_program_start;生成的map文件中STACK USAGE章節(jié)里面會(huì)包含Program entry的stack使用相關(guān)信息:

注意:上面的情況是基于如下的啟動(dòng)代碼:
Reset_Handler
LDR R0, =SystemInit
BLX R0
LDR R0, =__iar_program_start
BX R0
如果對(duì)應(yīng)的啟動(dòng)代碼沒有調(diào)用__iar_program_start,那么suc文件里面需要指定入口函數(shù)調(diào)用的所有函數(shù):
/* Specify Reset_Handler will call init_data_bss, SystemInit, startup_go_to_user_mode and main */ function Reset_Handler: 0, calls init_data_bss, calls SystemInit, calls startup_go_to_user_mode, calls main;生成的map文件中STACK USAGE章節(jié)里面會(huì)包含Program entry的stack使用相關(guān)信息:

參考文獻(xiàn):
1.IAR C/C++ Development Guide (Stack usage analysis)
-
IAR
+關(guān)注
關(guān)注
5文章
394瀏覽量
38235 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4403瀏覽量
66596
原文標(biāo)題:如何獲取入口函數(shù)不是__iar_program_start的Program entry的stack使用情況
文章出處:【微信號(hào):IAR愛亞系統(tǒng),微信公眾號(hào):IAR愛亞系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何在應(yīng)用程序調(diào)試期間分析棧和堆使用情況
這個(gè)棧堆大小我設(shè)置256就是start error 設(shè)置128一會(huì)start success 一會(huì)start error是什么情況?
請(qǐng)問如何在Keil開發(fā)環(huán)境中查看代碼大小和SRAM使用情況?
請(qǐng)問如何僅使用軟件和 TC375 精簡(jiǎn)板來測(cè)量函數(shù)調(diào)用的堆棧使用情況?
詳解hal_entry入口函數(shù)
UVC+MSC實(shí)現(xiàn)中MSC線程未運(yùn)行的原因?
中興通訊憑借其在非洲大陸實(shí)施的“Signal Reach Program”榮獲WSIS 2025冠軍獎(jiǎng)
OBC/DC-DC/BMS/熱管理/智能座艙磁性元件使用情況與要求
在IAR Arm開發(fā)工具鏈中--function_sections編譯選項(xiàng)的使用

如何獲取入口函數(shù)不是__iar_program_start的Program entry的stack使用情況
評(píng)論