IAR 一个工程项目编译出多个不同地址的ROM烧录文件

1、需要在IAR的链接文件里边定义不同地址的ROM区间,例如

define region ROM1 = mem:[from 0x0000C000 to 0x001E0000];
define region ROM2 = mem:[from 0x20000000 to 0x201E0000];
define region ROM3 = mem:[from 0x30000000 to 0x301E0000];
define region ROM4 = mem:[from 0x40000000 to 0x401E0000];

2、在IAR中定义section,其中readonly代表是把代码段放到该区间,并不会把全局或静态等变量放该区间,section里边是字符段,可自由定义,例如

place in ROM1 { readonly section .mycode1 };
place in ROM2 { readonly section .mycode2 };
place in ROM3 { readonly section .mycode3 };
place in ROM4 { readonly section .mycode4 };

3、利用IAR IDE选择部分代码链接对应ROM区间,IAR可以单独对某个C文件或某个目录选择链接区间,在IAR界面工程目录中,右键选择C文件或目录》Option》Override inherited settings勾选上(代表该项使用单独配置)》C/C++Compiler》Output》在Code section name中输入第2步中对应的section即可,如下图

4、进行上边步骤后,咱们需要去掉默认生成的bin或HEX或其他文件,如下图,将红色框框里边的勾去掉,就不会生成默认烧录文件

5、利用编译后执行命令行功能,输出多个烧录BIN,我们利用IAR的工具链,ielftool.exe,在IAR的安装目录arm/doc/EWARM_DevelopmentGuide.ENU.pdf中会有描述它的使用,命令行如下,

ielftool --bin-multi="0xC000-0x1E0000;0x20000000-0x201E0000" \(TARGET_PATH\) \(TARGET_BPATH\).bin,如图

这里我只填写了两个ROM的烧录BIN文件生成,其中环境变量TARGET_PATH为elf文件,其实在IAR中应该是out文件,TARGET_BPATH为生成的目录文件,可以是bin,也可以是hex,如下图

posted @ 2022-03-23 17:07  咸菜白饭  阅读(469)  评论(0)    收藏  举报