查看: 2220|回复: 0

[原创] IAR将库文件放置在外部flash的操作说明

[复制链接]
  • TA的每日心情
    开心
    2023-6-12 14:34
  • 签到天数: 165 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2019-4-24 16:27:18 | 显示全部楼层 |阅读模式
    分享到:
    MCU的资源空间是有限的,当内部flash空间不够时,较大的库可以存储在外扩的flash空间里。IAR支持通过修改链接器配置文件(*.icf)文件来让库文件存储在外部flash。
    IAR在执行链接时,会依据该文件的配置来分配目标文件的存储地址,如存储到RAM区,或者ROM区等。将库文件指定存储到外部Flash空间就是通过修改icf文件来实现的。选择芯片后,IAR已经提供了一个默认的链接器配置文件,我们可以通过options->Linker->Config选项找到该文件的保存路径,复制该文件到工程路径后再进行修改,避免破坏掉IAR提供的默认icf文件。

    将库文件放置在外部flash的操作说明.jpg
    首先介绍一下涉及到的IAR链接器配置文件的语法:
    Define regionEXROM_region=mem:[from EXROM_region_start to EXROM_region_end];
    defineregion指令用于定义存储区,上述指令是定义一个地址范围为EXROM_region_start到EXROM_region_end的存储区,名为EXROM_region。存储区定义之后,我们就可以通过placein指令将库存储到该存储区。
    place in EXROM_region{section .text object lib.a};   
    section.text指令表示选择lib.a库文件中的代码段,上述指令表示将lib.a库文件中的代码段存储到EXROM_region这个存储区域。
    具体操作步骤:
    1、通过options->Linker->Config选项找到IAR为芯片提供的默认icf文件保存路径,通过该路径将芯片对应的链接器icf配置文件复制到工程目录下。
    2、用文本编辑器打开工程所使用的icf文件,通过defineregion指令定义外部flash存储区。假设外部flash对应的地址范围为0x08020000-0x0803FFFF,将该存储区域命名为EXROM_region。
    /*定义存储区域起止地址符号*/
        define symbol EXROM_region_start =0x08020000;
        define symbol EXROM_region_end =0x0803FFFF;
      /*定义EXROM_region存储空间*/
    define region EXROM_region=mem:[from  EXROM_region_start   to EXROM_region_end];
    3、通过placein指令将*.a(库文件)中的代码和数据定位到外部flash对应的存储区域EXROM_region,例如定位名为lib.a中的代码和数据,库文件中同时存在代码和数据,因此需要同时定位两者。
      placein EXROM_region {section .rodata object lib.a};
    placein EXROM_region {section .text object lib.a};
    微信图片_20190419090620.png

    4、因为修改了icf文件,需要在Linker选项中勾选override default,然后选择我们自己修改后的icf文件来链接工程。


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 19:56 , Processed in 0.114304 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.