问题
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文章
350浏览量
36663 -
函数
+关注
关注
3文章
4327浏览量
62567
原文标题:如何获取入口函数不是__iar_program_start的Program entry的stack使用情况
文章出处:【微信号:IAR爱亚系统,微信公众号:IAR爱亚系统】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论