最近有一个项目需要对ICF进行外部编程。两个工程引用相同的ICF,通过外部输入参数来区分内部的地址范围。通过相关资料的研究,cmake可以通过参数导入一个变量来就觉这个问题。后来参考IAR手册发现可以在IDE中定义.
例子:
icf文件:
if (isdefinedsymbol(CONFIG_SYM3)) {
define symbol __ICFEDIT_region_ROM_start__ = 0x4000;
define symbol __ICFEDIT_region_ROM_end__ = 0x7FFFF;
}else
{
define symbol __ICFEDIT_region_ROM_start__ = 0x000000;
define symbol __ICFEDIT_region_ROM_end__ = 0x7FFFF;
}
...... 其他略。
为了使用相同的ICF进行维护防止多个文件导致的地址不统一问题。可以再IAR的option->linker->config里面定义定义CONFIG_SYM =XX值。
这样在编译的时候会根据工程中是否定义了这个CONFIG_SYM符号来采用不同的地址范围进行编译。
下面是IAR的官方解释:
Config
The Config options specify the path and name of the linker configuration file and define symbols for the configuration file.
Configuration file symbol definitions
Define constant configuration symbols to be used in the configuration file. Such a symbol has the same effect as a symbol defined using the define symbol directive in the linker configuration file.