MCU的资源空间是有限的,当内部flash空间不够时,较大的库可以存储在外扩的flash空间里。IAR支持通过修改链接器配置文件(*.icf)文件来让库文件存储在外部flash。 IAR在执行链接时,会依据该文件的配置来分配目标文件的存储地址,如存储到RAM区,或者ROM区等。将库文件指定存储到外部Flash空间就是通过修改icf文件来实现的。选择芯片后,IAR已经提供了一个默认的链接器配置文件,我们可以通过options->Linker->Config选项找到该文件的保存路径,复制该文件到工程路径后再进行修改,避免破坏掉IAR提供的默认icf文件。
首先介绍一下涉及到的IAR链接器配置文件的语法: Define]mem:[from EXROM_region_start to EXROM_region_end]; defineregion指令用于定义存储区,上述指令是定义一个地址范围为EXROM_region_start到EXROM_region_end的存储区,名为EXROM_region。存储区定义之后,我们就可以通过placein指令将库存储到该存储区。 place]具体操作步骤: 1、通过options->Linker->Config选项找到IAR为芯片提供的默认icf文件保存路径,通过该路径将芯片对应的链接器icf配置文件复制到工程目录下。 2、用文本编辑器打开工程所使用的icf文件,通过defineregion指令定义外部flash存储区。假设外部flash对应的地址范围为0x08020000-0x0803FFFF,将该存储区域命名为EXROM_region。 /*定义存储区域起止地址符号*/ ] define symbol EXROM_region_end =0x0803FFFF; /*定义EXROM_region存储空间*/ ] placein EXROM_region {section .rodata object lib.a}; placein EXROM_region {section .text object lib.a};
4、因为修改了icf文件,需要在Linker选项中勾选override default,然后选择我们自己修改后的icf文件来链接工程。
|