0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

IAR爱亚系统 来源:IAR爱亚系统 2024-11-25 16:23 次阅读

问题

IAR中默认的入口函数是__iar_program_start,使能stack usage analysis之后:

4bbbb162-a305-11ef-93f3-92fbcf53809c.png

生成的map文件中STACK USAGE章节里面会包含Program entry的stack使用相关信息

4bce15fa-a305-11ef-93f3-92fbcf53809c.png

如果对应启动代码没有使用默认的入口函数__iar_program_start,需要使用--entry链接器选项指定对应的入口函数(以使用入口函数Reset_Handler为例):

4bdbbf20-a305-11ef-93f3-92fbcf53809c.png

但是使能stack usage analysis之后,生成的map文件中STACK USAGE章节里面没有包含Program entry的stack使用相关信息:

4bfe9c16-a305-11ef-93f3-92fbcf53809c.png

4c09c6ea-a305-11ef-93f3-92fbcf53809c.png

原因

正常来说,编译器可以生成每个函数的调用和stack使用信息,链接器可以计算出每个根函数的最大stack使用。但是如果源代码是用汇编写的,那么对应函数的调用和stack使用信息需要用户指定(如果用户不指定,链接器没有办法知道对应的信息,从而没有办法计算出对应的最大stack使用)。

4c2e4fba-a305-11ef-93f3-92fbcf53809c.png

解决办法

需要在对应的stack usage control file (suc)里面指定对应的函数调用和stack使用信息:

4c540cd2-a305-11ef-93f3-92fbcf53809c.png

对应.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使用相关信息:

4c66eafa-a305-11ef-93f3-92fbcf53809c.png

注意:上面的情况是基于如下的启动代码:

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使用相关信息:

4c80e3ba-a305-11ef-93f3-92fbcf53809c.png

参考文献:

1.IAR C/C++ Development Guide (Stack usage analysis)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IAR
    IAR
    +关注

    关注

    5

    文章

    352

    浏览量

    36676
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62598

原文标题:如何获取入口函数不是__iar_program_start的Program entry的stack使用情况

文章出处:【微信号:IAR爱亚系统,微信公众号:IAR爱亚系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LMX2592正常使用情况下温度大概有多少?

    你好,LMX2592如果将 OUTA_PD = 1;OUTB_PD = 1;为什么芯片还是很烫,正常使用情况下温度大概有多少,对于温度的变化可以提供一下参考吗
    发表于 11-08 08:32

    TPLD-PROGRAM用户指南

    电子发烧友网站提供《TPLD-PROGRAM用户指南.pdf》资料免费下载
    发表于 10-30 09:57 0次下载
    TPLD-<b class='flag-5'>PROGRAM</b>用户指南

    TMS320C64x在高性能DSP应用中的高速缓存使用情况

    电子发烧友网站提供《TMS320C64x在高性能DSP应用中的高速缓存使用情况.pdf》资料免费下载
    发表于 10-21 09:43 0次下载
    TMS320C64x在高性能DSP应用中的高速缓存<b class='flag-5'>使用情况</b>

    IAR中生成库文件并被应用工程调用的参考流程(下)

    在Linker → Library界面勾选Override default program entry,勾选Entry symbol,并填入以下内容
    的头像 发表于 05-22 14:38 2768次阅读
    在<b class='flag-5'>IAR</b>中生成库文件并被应用工程调用的参考流程(下)

    如何查看TC397内存的使用情况

    Hi,请问,如何查看 TC397 内存的使用情况?谢谢!
    发表于 05-22 07:50

    使用cyble222014测试蓝牙通信,使用mini program4 5pin端口编程显示未获取Psoc设备,为什么?

    我正在使用芯片cyble222014测试蓝牙通信,目前正在使用 mini program4 5pin 端口编程,但它显示未获取 Psoc 设备,我已仔细检查了各处的连接,因此任何人都明白这是怎么回事,出了什么问题,非常感谢。
    发表于 05-21 07:16

    可以从下面的图看出我的工程flash和ram的使用情况吗?

    芯片是:dspf28335;可以从下面的图看出我的工程flash和ram的使用情况吗?感觉flash还可以,ram有点不够用了,请求大师指点,如何分析?
    发表于 05-11 10:11

    STM32F303启动文件中的Stack_Size和Stack_Mem如何在C代码中获取其地址或值?

    为了在业务代码中监控系统的堆栈使用情况,想在业务代码中获取Stack_Mem的内存地址和Stack_Size的值。目前定义如下:可实现读取栈地址但无法读取栈大小 extern unsi
    发表于 04-01 08:18

    CubelIDE HAL_FLASH_Program仿真时出错怎么解决?

    擦除后,可看到整页为65535. 然后进入HAL_FLASH_Program 最后在FLASH_Program_Fast(Address, (uint32_t)Data);下一步 仿真报错
    发表于 03-28 06:56

    CUBEIDE运行完可以看RAM的使用情况,运行中可以实时查看RAM的使用情况吗?

    CUBEIDE运行完可以看RAM的使用情况,运行中可以实时查看RAM的使用情况吗?以及负载情况? 图片是运行完可以看RAM使用情况,是否可以运行中实时查看?是
    发表于 03-12 07:56

    rtthread编译后如何查看堆栈空间使用情况

    rtthread编译后如何查看堆栈空间使用情况,现在只能在编译完成后看到总大小,有没有办法能看到详细的使用情况。 由于RAM只有128K,除去内存池32k,想看看剩余的RAM在哪用了
    发表于 03-05 07:58

    如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况

    我知道嵌入式软件构建工具会报告程序闪存使用情况。我认为他们也报告 RAM 使用率,但他们是否报告最大 RAM 使用率? 生成工具可能不知道在运行时将使用多少堆。是否有构建工具不知道的其他 RAM 使用情况? 如何准确找出运行时使用了多少RAM?
    发表于 01-22 07:02

    有什么办法可以获取TC397中的实时内存使用情况吗?

    有什么办法可以获取 TC397 中的实时内存使用情况吗? 例如,我能否通过计算当前堆栈指针值和基本堆栈指针值之间的差异来获得使用的内存大小?
    发表于 01-22 06:18

    请问TC397如何查看RAM和pFlash的使用情况

    请问 TC397 如何查看 RAM 和 pFlash 的使用情况
    发表于 01-19 06:37

    正常使用情况下LTC3331的ship引脚接高电平还是低电平?

    正常使用情况下,LTC3331的ship引脚接高电平还是低电平?
    发表于 01-05 11:07