问题
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文章
401浏览量
38362 -
函数
+关注
关注
3文章
4408浏览量
66905
原文标题:如何获取入口函数不是__iar_program_start的Program entry的stack使用情况
文章出处:【微信号:IAR爱亚系统,微信公众号:IAR爱亚系统】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
在Keil5中查看栈大小
如何检查EZ-USB™ CX3 上的 SRAM 使用情况(JTAG 不可用)?
如何在应用程序调试期间分析栈和堆使用情况
这个栈堆大小我设置256就是start error 设置128一会start success 一会start error是什么情况?
请问如何仅使用软件和 TC375 精简板来测量函数调用的堆栈使用情况?
详解hal_entry入口函数
中兴通讯凭借其在非洲大陆实施的“Signal Reach Program”荣获WSIS 2025冠军奖
OBC/DC-DC/BMS/热管理/智能座舱磁性元件使用情况与要求
在IAR Arm开发工具链中--function_sections编译选项的使用

如何获取入口函数不是__iar_program_start的Program entry的stack使用情况
评论