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

    文章

    401

    浏览量

    38362
  • 函数
    +关注

    关注

    3

    文章

    4408

    浏览量

    66905

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    客户使用profinet转devicenet协议网关的使用情况分享

    Profinet
    jf_69310483
    发布于 :2025年12月03日 14:28:31

    在Keil5中查看栈大小

    :打开生成的.map文件,在Image Symbol Table部分查找栈的相关信息,包括栈的大小和使用情况。 3、利用IDE的功能: 方法说明:Keil编译器在编译过程中会自动跟踪堆栈的使用情况
    发表于 11-14 06:32

    如何检查EZ-USB™ CX3 上的 SRAM 使用情况(JTAG 不可用)?

    型的调试工具来实时监控内存使用情况。 是否有其他方法(例如构建报告、SDK 功能或EZ-USB™ Suite 内的工具)可以让我检查固件使用了多少 SRAM?
    发表于 11-11 06:33

    如何在应用程序调试期间分析栈和堆使用情况

    随着 AMD Vitis 统一软件平台 2021.2 的发布,Vitis 引入了一个 Tcl 脚本,用于在应用程序运行的特定时间点协助查找栈和堆的内存使用情况。该脚本已延续到后续的 Vitis 版本
    的头像 发表于 10-24 16:54 625次阅读
    如何在应用程序调试期间分析栈和堆<b class='flag-5'>使用情况</b>

    这个栈堆大小我设置256就是start error 设置128一会start success 一会start error是什么情况

    error\"); } return 0; } 这个栈堆大小我设置256就是start error 设置128一会start success 一会start error是什么情况
    发表于 09-29 07:44

    请问如何在Keil开发环境中查看代码大小和SRAM使用情况

    如何在Keil开发环境中查看代码大小和SRAM使用情况
    发表于 08-20 06:38

    请问如何仅使用软件和 TC375 精简板来测量函数调用的堆栈使用情况

    我想测量 AURIX TriCore™ TC3xx 项目的函数调用的堆栈使用情况。 我不知道该怎么做。 我知道事实上作为硬件我只有一个 TC375 lite 开发板,没有 BlueBox 或任何
    发表于 08-08 07:28

    详解hal_entry入口函数

    当使用RTOS时,程序从main函数开始进行线程调度;当没有使用RTOS时,C语言程序的入口函数main函数调用了hal_entry
    的头像 发表于 07-25 15:34 1688次阅读

    中兴通讯凭借其在非洲大陆实施的“Signal Reach Program”荣获WSIS 2025冠军奖

    Reach Program”从众多提案中脱颖而出,荣获WSIS冠军奖(Champion Projects),成为ICT文化多样性领域唯一获此殊荣的中国企业。此次获奖不仅是对中兴通讯在数字技术领域持续
    的头像 发表于 07-09 11:02 6711次阅读
    中兴通讯凭借其在非洲大陆实施的“Signal Reach <b class='flag-5'>Program</b>”荣获WSIS 2025冠军奖

    OBC/DC-DC/BMS/热管理/智能座舱磁性元件使用情况与要求

    理/智能座舱等功能模块中磁性元件使的用情况与性能要求,《磁性元件与电源》采访了敦源电子研发总监汪洪伟,为我们一一揭秘。 OBC/DC-DC/BMS/热管理/智能座舱磁性元件使用情况 随着新能源汽车向高集成化、智能化方向加速发展,磁性元件作为电子系统的“隐
    的头像 发表于 07-08 14:05 739次阅读
    OBC/DC-DC/BMS/热管理/智能座舱磁性元件<b class='flag-5'>使用情况</b>与要求

    IAR Arm开发工具链中--function_sections编译选项的使用

    本文主要介绍在IAR Arm开发工具链中不修改源代码的情况下使用‑‑function_sections编译选项把函数放到单独的section。
    的头像 发表于 06-13 13:53 1541次阅读
    在<b class='flag-5'>IAR</b> Arm开发工具链中--function_sections编译选项的使用

    S32G3有没有办法从.map文件确定SRAM使用情况

    我有 NXP S32G3 板。我有 .map 文件。有没有办法从 .map 文件确定 SRAM 使用情况。 非常感谢帮助。
    发表于 04-08 06:00

    使用DLPC230-Q1 Control Program Lite调试时,点击连接时报错x80040154是怎么回事?

    按照说明连接好线缆,使用DLPC230-Q1 Control Program Lite调试时,参数按照说明设置的,但点击连接时报错:x80040154
    发表于 02-21 14:09

    安装完Control Program 2.0.0.0,点击Connect时候就会报错,是哪里出了问题?

    我安裝完 Control Program 2.0.0.0,每當我點擊Connect時候就會跳出以下錯誤,請問我是否遺漏甚麼呢? 謝謝。 =====================.log
    发表于 02-20 07:11

    DLP230 control program是否支持一主多从模式?

    目前使用DLP230 control program 控制DLP5530光机。 现在有这样一个需求:用DLP 230 control program 连接cheetah SPI(1个
    发表于 02-17 07:20