問題
IAR中默認的入口函數是__iar_program_start,使能stack usage analysis之后:
生成的map文件中STACK USAGE章節里面會包含Program entry的stack使用相關信息:
如果對應啟動代碼沒有使用默認的入口函數__iar_program_start,需要使用--entry鏈接器選項指定對應的入口函數(以使用入口函數Reset_Handler為例):
但是使能stack usage analysis之后,生成的map文件中STACK USAGE章節里面沒有包含Program entry的stack使用相關信息:
原因
正常來說,編譯器可以生成每個函數的調用和stack使用信息,鏈接器可以計算出每個根函數的最大stack使用。但是如果源代碼是用匯編寫的,那么對應函數的調用和stack使用信息需要用戶指定(如果用戶不指定,鏈接器沒有辦法知道對應的信息,從而沒有辦法計算出對應的最大stack使用)。
解決辦法
需要在對應的stack usage control file (suc)里面指定對應的函數調用和stack使用信息:
對應.suc文件中指定對應的信息:
/* 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章節里面會包含Program entry的stack使用相關信息:
注意:上面的情況是基于如下的啟動代碼:
Reset_Handler LDR R0, =SystemInit BLX R0 LDR R0, =__iar_program_start BX R0如果對應的啟動代碼沒有調用__iar_program_start,那么suc文件里面需要指定入口函數調用的所有函數:
/* 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章節里面會包含Program entry的stack使用相關信息:
參考文獻:
1.IAR C/C++ Development Guide (Stack usage analysis)
-
IAR
+關注
關注
5文章
376瀏覽量
37376 -
函數
+關注
關注
3文章
4377瀏覽量
64556
原文標題:如何獲取入口函數不是__iar_program_start的Program entry的stack使用情況
文章出處:【微信號:IAR愛亞系統,微信公眾號:IAR愛亞系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
在IAR Arm開發工具鏈中--function_sections編譯選項的使用

S32G3有沒有辦法從.map文件確定SRAM使用情況?
使用DLPC230-Q1 Control Program Lite調試時,點擊連接時報錯x80040154是怎么回事?
通過DLPC230 control program上位機可以投影png格式的圖片,我想請問一下系統是否支持投影動畫?
安裝完Control Program 2.0.0.0,點擊Connect時候就會報錯,是哪里出了問題?
DLP230 control program是否支持一主多從模式?
Linux下如何管理虛擬內存 使用虛擬內存時的常見問題
LMX2592正常使用情況下溫度大概有多少?
TMS320C64x在高性能DSP應用中的高速緩存使用情況

tc377燒錄時連接正常,但Program失敗了,為什么?
Protues中自己封裝的芯片元件無Program File、Clock Frequency選項怎么解決,求求大神了!
使用debug調試時出現無法進入main的情況,為什么?
Banana Pi BPI-M7 RK3588開發板在 Linux 上檢查 Rockchip NPU 使用情況

評論