MCU的资源空间是有限的,当内部flash空间不够时,较大的库可以存储在外扩的flash空间里。IAR支持通过修改链接器配置文件(*.icf)文件来让库文件存储在外部flash。
首先介绍一下涉及到的IAR链接器配置文件的语法:
Define region EXROM_region=mem:[from EXROM_region_start to EXROM_region_end];
具体操作步骤:
1、通过options->Linker->Config选项找到IAR为芯片提供的默认icf文件保存路径,通过该路径将芯片对应的链接器icf配置文件复制到工程目录下。
2、用文本编辑器打开工程所使用的icf文件,通过define region指令定义外部flash存储区。假设外部flash对应的地址范围为0x08020000- 0x0803FFFF,将该存储区域命名为EXROM_region。
/*定义存储区域起止地址符号*/
3、通过place in指令将*.a(库文件)中的代码和数据定位到外部flash对应的存储区域EXROM_region,例如定位名为lib.a中的代码和数据,库文件中同时存在代码和数据,因此需要同时定位两者。
place in EXROM_region {section .rodata object lib.a};4、因为修改了icf文件,需要在Linker选项中勾选override default,然后选择我们自己修改后的icf文件来链接工程。