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

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

3天内不再提示

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

IAR爱亚系统 ? 来源:IAR爱亚系统 ? 2025-06-13 13:53 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前面的文章如何在IAR Embedded Workbench中把变量和函数放到指定的section介绍了如何把变量和函数放到指定的section,其中把函数放到指定的section可以通过下面几种方法:

使用 @ 操作符

使用 GCC 风格的section属性 __attribute__ ((section ))

使用 #pragma location 命令

使用 #pragma default_function_attributes 命令

这几种方法都需要修改源代码,如果对应源代码不方便修改,那么对应函数默认会放到.text section。最新发布的IAR Arm开发工具链9.70.1版本增加了??function_sections编译选项可以把函数放到单独的section。

本文主要介绍在IAR Arm开发工具链中不修改源代码的情况下使用??function_sections编译选项把函数放到单独的section。

01默认section

IAR Arm开发工具链中默认的section如下,其中函数/代码默认会放到.text section:

5b3d0478-4671-11f0-b715-92fbcf53809c.png

02使用??function_sections编译选项把函数放到单独的section

下面通过具体的例子介绍在IAR Arm开发工具链中??function_sections编译选项的使用。

对函数不做任何section放置处理

这里以CrcCheck函数为例,首先不做任何section放置处理,查看map文件发现CrcCheck函数会放到默认的.text section:

5b4f0f10-4671-11f0-b715-92fbcf53809c.png5b5a36f6-4671-11f0-b715-92fbcf53809c.png

使用??function_sections编译选项

使用--function_sections编译选项把函数放到单独的section:

5b69819c-4671-11f0-b715-92fbcf53809c.png

5b788ba6-4671-11f0-b715-92fbcf53809c.png

5b8b9908-4671-11f0-b715-92fbcf53809c.png

查看map文件发现CrcCheck函数放到了使用--function_sections编译选项生成的.text.CrcCheck section:

5ba352f0-4671-11f0-b715-92fbcf53809c.png5bb6a6de-4671-11f0-b715-92fbcf53809c.png

修改源代码把函数放到指定的section

修改源代码把函数放到指定的section,比如使用#pragmalocation命令将CrcCheck函数放到指定的.CrcCheck section

#pragmalocation =".CrcCheck"
voidCrcCheck(void)

查看map文件发现CrcCheck函数放到了指定的.CrcCheck section:

5bcf029c-4671-11f0-b715-92fbcf53809c.png5be1d7fa-4671-11f0-b715-92fbcf53809c.png

03总结

本文介绍了在IAR Arm开发工具链中不修改源代码的情况下使用??function_sections编译选项把函数放到单独的section。对应函数的section放置优先级顺序如下:

如果源代码里面把函数放到指定的section,那么对应的函数会放到指定的section。

如果源代码里面没有把函数放到指定的section,使用了??function_sections编译选项,那么对应函数会放到单独的section(对应单独section的名字是.text.加上对应函数的名字,比如CrcCheck函数会放到.text.CrcCheck section)。

如果源代码里面没有把函数放到指定的section,也没有使用??function_sections编译选项,那么函数会放到默认的.text section。

注意事项:

当前IAR Arm开发工具链库文件中的函数会放到.text section。

如果函数使用了__ramfunc关键字,对应函数默认会放到.text.rw section,对应Kind是inited,默认会放到RAM地址区域;但是如果使用了??function_sections编译选项,对应函数会放到单独的section,对应Kind是ro code, 默认会放到ROM地址区域。需要对相关section使用对应的initialize命令其Kind才会从ro code变成inited (更多关于initialize命令的信息,可以参考IAR Embedded Workbench中的初始化策略),同时需要把对应section放到RAM地址区域。

当前IAR Arm开发工具链中没有类似GCC中的-fdata-sections编译选项,因为在ICF文件中可以把变量放到指定的block。

如果可以修改源代码,建议修改源代码把对应的关键函数放到指定的section,因为??function_sections编译选项有可能会影响编译优化:

5bf52a8a-4671-11f0-b715-92fbcf53809c.png

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

    关注

    134

    文章

    9368

    浏览量

    378229
  • IAR
    IAR
    +关注

    关注

    5

    文章

    383

    浏览量

    37550
  • 函数
    +关注

    关注

    3

    文章

    4383

    浏览量

    65065
  • 源代码
    +关注

    关注

    96

    文章

    2953

    浏览量

    68476
  • 开发工具链
    +关注

    关注

    0

    文章

    23

    浏览量

    1721

原文标题:在IAR Arm开发工具链中使用??function_sections编译选项把函数放到单独的section

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Keil MDK 和 IAR 两款ARM开发工具区别比较

    首先要说明,没有那款开发工具是万能的,也没有那款工具在所有方面都具有绝对优势。对于Keil MDK-ARMIAR两款工具择,可以根据自己的
    发表于 10-13 09:53

    arm交叉编译工具

    我有一个疑问:如果在编译内核时用的交叉编译工具是android 的arm-eabi-4.6,那我后面应用程序
    发表于 11-22 14:36

    Keil MDK 和 IAR 两款ARM开发工具区别

    Keil MDK 和 IAR 两款ARM开发工具区别比较首先要说明,没有那款开发工具是万能的,也没有那款工具在所有方面都具有绝对优势。对于K
    发表于 07-01 07:02

    Quake Global选择IAR Systems的开发工具

    Quake Global选择IAR Systems的开发工具作为其新品的开发工具  嵌入式行业内领先的软件开发工具提供商IAR Syste
    发表于 01-23 09:37 ?672次阅读

    ARM开发工具

    Keil公司开发ARM开发工具MDK(Microcontroller Development Kit),是 用来开发基于ARM核的系列微控
    发表于 11-16 17:27 ?0次下载

    ARM开发工具解读

    1.6 ARM开发工具 用户选用ARM处理器开发嵌入式产品时,选择合适的开发工具可以加快开发进度
    发表于 10-18 13:29 ?3次下载
    <b class='flag-5'>ARM</b><b class='flag-5'>开发工具</b>解读

    IAR EWARM软件免费下载(嵌入式应用编程开发工具

    ARMIAREWARM。 嵌入式应用编程开发工具IAR embedded Workbench是一套高度精密且使用方便的嵌入式应用编程开发工具。该集成开发环境包含了
    发表于 11-23 16:45 ?24次下载
    <b class='flag-5'>IAR</b> EWARM软件免费下载(嵌入式应用编程<b class='flag-5'>开发工具</b>)

    ARM教程之ARM常用开发工具及相应开发环境配置资料说明

    本文档的主要内容详细介绍的是ARM教程之ARM常用开发工具及相应开发环境配置资料说明包括了:ADS(ARM Developer Suite)
    发表于 03-20 15:54 ?24次下载
    <b class='flag-5'>ARM</b>教程之<b class='flag-5'>ARM</b>常用<b class='flag-5'>开发工具</b>及相应<b class='flag-5'>开发</b>环境配置资料说明

    米尔科技ARM DS-5开发工具介绍

    专为裸机、RTOS、Linux / Android项目的先进软件开发工具。 除了支持所有ARM处理器的完整的调试和系统性能分析,它还包括高度优化的ARM
    的头像 发表于 11-20 09:58 ?1806次阅读
    米尔科技<b class='flag-5'>ARM</b> DS-5<b class='flag-5'>开发工具</b>介绍

    IAR EW430开发工具的使用教程

    实验平台用到的开发软件为IAR Embedded Workbench for430(以下简称IAR EW430) 。IAR Systems 是全球领先的嵌入式系统
    发表于 11-10 17:35 ?30次下载
    <b class='flag-5'>IAR</b> EW430<b class='flag-5'>开发工具</b>的使用教程

    KeilMDK和IAR两款ARM开发工具比较

    KeilMDK和IAR两款ARM开发工具比较(单片机编程多少钱一个)-KeilMDK和IAR两款ARM
    发表于 09-30 10:52 ?16次下载
    KeilMDK和<b class='flag-5'>IAR</b>两款<b class='flag-5'>ARM</b><b class='flag-5'>开发工具</b>比较

    KeilMDK和IAR两款ARM开发工具哪个比较好

    KeilMDK和IAR两款ARM开发工具哪个比较好(单片机内部结构示意图)-KeilMDK和IAR两款ARM
    发表于 09-30 11:07 ?7次下载
    KeilMDK和<b class='flag-5'>IAR</b>两款<b class='flag-5'>ARM</b><b class='flag-5'>开发工具</b>哪个比较好

    如何利用现代嵌入式开发工具的堆栈保护功能

     以被广泛使用的IAR Embedded Workbench for Arm嵌入式开发工具为例,使用Project》Options》C/C++ Compiler》Code》Stack protection
    的头像 发表于 03-29 14:50 ?1762次阅读
    如何利用现代嵌入式<b class='flag-5'>开发工具</b><b class='flag-5'>中</b>的堆栈保护功能

    IAR开发平台升级Arm和RISC-V开发工具,加速现代嵌入式系统开发

    IAR正式发布其旗舰产品的重大更新版本:Arm开发工具v9.70和RISC-V开发工具v3.
    的头像 发表于 06-11 14:28 ?330次阅读

    IAR发布Arm开发工具v9.70.1版本

    近期,IAR重磅发布其旗舰产品——Arm开发工具的全新版本v9.70.1,全面提升了性能、安全性及自动化方面的能力。此次重大更新将进一步
    的头像 发表于 06-25 14:12 ?629次阅读