工作中遇到需要将某个公用 IAR工程a 生成符号输出,被其他4个工程调用。
a.icf 要求其 ROM,RAM空间足够大
define symbol ICFEDIT_region_ROM_start = 0x0000C000;
define symbol ICFEDIT_region_ROM_end = 0x0000BFFF;
define symbol ICFEDIT_region_RAM_start = 0x2000FE00;
define symbol ICFEDIT_region_RAM_end = 0x2000FFFF;
但是堆/栈大小为0.
define symbol ICFEDIT_size_cstack = 0x0;
define symbol ICFEDIT_size_heap = 0x0;
自己的理解:ROM空间存放 .intvect .text .rodata .data这些(启动时将 .data段 由ROM复制到RAM中),在编译链接中即可以判断大小是否够用。而 堆/栈大小是否够用则需要到程序运行起来后才能判断出来。而a工程所需的 堆/栈可由调用者(其他4个工程)提供。
1. 参考了IAR官网的介绍
使用 IAR isymexport 从一个工程输出符号到另一个工程
https://www.iar.com/knowledge/support/technical-notes/linker/using-isymexport-to-export-symbols-const-data-from-one-project-to-another/