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

浏览:2380来源:本站时间:2019-04-19

MCU的资源空间是有限的,当内部flash空间不够时,较大的库可以存储在外扩的flash空间里。IAR支持通过修改链接器配置文件(*.icf)文件来让库文件存储在外部flash。


IAR在执行链接时,会依据该文件的配置来分配目标文件的存储地址,如存储到RAM区,或者ROM区等。将库文件指定存储到外部Flash空间就是通过修改icf文件来实现的。选择芯片后,IAR已经提供了一个默认的链接器配置文件,我们可以通过options->Linker->Config选项找到该文件的保存路径,复制该文件到工程路径后再进行修改,避免破坏掉IAR提供的默认icf文件。


首先介绍一下涉及到的IAR链接器配置文件的语法:

Define region EXROM_region=mem:[from EXROM_region_start to EXROM_region_end];
define region指令用于定义存储区,上述指令是定义一个地址范围为EXROM_region_start到EXROM_region_end的存储区,名为EXROM_region。存储区定义之后,我们就可以通过place in指令将库存储到该存储区。
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文件,通过define region指令定义外部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、通过place in指令将*.a(库文件)中的代码和数据定位到外部flash对应的存储区域EXROM_region,例如定位名为lib.a中的代码和数据,库文件中同时存在代码和数据,因此需要同时定位两者。

place in EXROM_region {section .rodata object lib.a};
place in EXROM_region {section .text object lib.a};



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





京ICP备:京ICP备05011254号-1 版权归北京麦克泰软件技术有限公司所有
北京麦克泰软件技术有限公司