IAR中ICF文件分析与应用

转载 2013年12月05日 21:54:08

sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理 解ICF文件的内容尤其重要。

一个标准的ICF文件可包括下面这些内容:

1.        可编址的存储空间(memory)
2.       不同的存储器地址区域(region)
3.        不同的地址块(block)
4.       Section的初始化与否
5.       Section在存储空间中的放置

下 面介绍了几条ICF文件中常见的指令,详细内容请参考ILINK相关说明文档(EWARM_DevelopmentGuide.pdf):

1.     define [ exported ] symbol name = expr;
作用:    指定某个符号的值。

参数:    exported 导出该symbol,使其对可执行镜像可用
name      --符号名
expr     --符号值

举例:
define symbol RAM_START_ADDRESS = 0x40000000;
define symbol  RAM_END_ADDRESS = 0x4000FFFF;    

2.    define memory name with  size = expr [, unit-size];

作用:    定义一个可编址的存储地址空间(memory)。

参数:    name     --memory的名称
expr     --地址空间的大小
unit-size --expr的单位,可以是位(unitbitsize),缺省是字节(unitbytesize)

举例:
define memory MEM with size = 4G;

3.    define  region name = region-expr;

作用:     定义一个存储地址区域(region)。一个区域可由一个或多个范围组成,每个范围内地址必须连续,但几个范围之间不必是连续的。

参数:    name region的名称
region-expr memory:[from expr { to  expr | size expr}],可以定义起止范围,也可以定义起始地址和region的大小

举例:
define region ROM = MEM:[from 0x0 size 0x10000];
define  region ROM = MEM:[from 0x0 to 0xFFFF];

4.    define block name[  with param, param... ]

{

extended-selectors

};

作用:    定义一个地址块(block);它可以是个空块,比如栈、堆;也可以包含一系列sections。

参数:    name     block的名称
param 可以是:     size = expr (块的大小)
maximum size = expr (块大小的上限)
alignment =  expr (最小对齐字节数)
fixed order (按照固定顺序放置sections)

extended-selector [ first | last ] { section-selector | block name  | overlay name }
first 最先存放
last  最后存放
section-selector [ section-attribute ][ section  sectionname ][object filename ]
section-attribute [  readonly [ code | data ] | readwrite [ code | data ] | zeroinit ]
sectionname section的名称
filename 目标文件的名称
即可以按照section的属性,名称及其所在目标文件的名称这三个过滤条件中,任意选取一个条件,或选取多个条件进行组合,来圈定所要求的 sections。
name block或overlay的名称

举例:
define block HEAP with size = 0x1000, alignment = 4 { };
define block MYBLOCK1 = { section mysection1, section mysection2,  readwrite };
define block MYBLOCK2 = { readonly object  myfile2.o };

5.    initialize { by copy | manually } [ with  param, param... ]
{
section-selectors
};

作用:    初始化sections。

参数:    by copy 在程序启动时自动执行初始化。
manually 在程序启动时不自动执行初始化。
param 可以是: packing = { none |  compress1 | compress2 | auto }
copy routine = functionname
packing表示是否压缩数据,缺省是auto。
functionname表示是否使用自己的拷贝函数来取代缺省函数。
section-selector 同上

举例:
initialize by copy { rw };

6.    do not  initialize
{
section-selectors
};

作用:    规定在程序启动时不需要初始化的sections。一般用于__no_init声明的变量段(.noinit)。

参数:    section-selector 同上

举例:
do not initialize {  .noinit };

7.    place at { address memory[: expr] | start of  region_expr | end of region_expr }
{
extended-selectors
};

作用:     把一系列sections和blocks放置在某个具体的地址,或者一个region的开始或者结束处。

参数:     memory memory的名称
expr 地址值,该地址必须在memory所定义的范围内
region_expr region的名称
extended-selector 同上

举例:
place  at start of ROM { section .cstart }; place at end of ROM {  section  .checksum }; place at address MEM:0x0 { section .intvec };

8.     place in region-expr
{
extended-selectors
};

作用:    把一系列sections和blocks放置在某个region中。sections和blocks将按任意顺序放置。

参数:    region-expr region的名称
extended-selector 同上

举例:
place in ROM { readonly };         /* all readonly  sections */ 
place in RAM { readwrite };         /* all  readwrite sections */
place in RAM { block HEAP, block  CSTACK, block IRQ_STACK }; 
place in ROM { section .text  object myfile.o };     /* the .text section of myfile.o */ 
place in ROM { readonly object myfile.o };         /* all read-only  sections of myfile.o */ 
place in ROM { readonly data object  myfile.o };     /* all read-only data sections myfile.o */
FROM:http://blog.21ic.com/user1/5910/archives/2009/61982.html

IAR的ICF文件中宏给程序使用

如果想定在rom空间

icf中:

place at address mem:0x08090000 { readonly section .test };

C:中:

#pragma location = ".test"
const u32 uiData[512];// const 切不可省略

如果想定在ram空间

icf中:

place at address mem:0x08090000 { readwrite section .test };

C:中:

#pragma location = ".test"
u32 uiData[512];

可发现uiData的值为0x08090000

该法可方便通过ICF指定某变量的地址。

程序也可以。写法类似.vector

如果用block的方。类似

define block CSTACK    with alignment = 8, size =  __ICFEDIT_size_cstack__   { };

C中:

#pragma language="extended"
#pragma segment="CSTACK"

ptr = __sfe( "CSTACK" );可得到CSTACK的高端地址+1

__sfe: Returns last address of segment.


原地址:http://hi.baidu.com/kdlipm/item/fff36e1e9d3887a7ffded567

相关文章推荐

IAR中ICF文件分析与应用

来自:http://blog.csdn.net/hitxiaya/article/details/6607075 sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是...

IAR中ICF文件分析与应用

sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理 解ICF文件的内容尤其重要。一个标准的ICF文件可包括...
  • hitxiaya
  • hitxiaya
  • 2011年07月14日 22:08
  • 11046

菜鸟详解iar的icf文件(链接文件)

一、每个芯片开发商都会针对每款芯片来编写一个.icf文件。对于基本的应用,这个.icf文件足以满足你的工程需要。但有时也会需要改动,比如当你的项目要添加外部RAM时就要修改一下.icf啦。 1、Icf...

IAR中xcl及icf文件详解

文章来自:http://hi.baidu.com/conanbox/blog/item/c83d2ac35575dd3ce5dd3beb.html 链接器和链接器的配置           ...
  • DICKJTK
  • DICKJTK
  • 2013年02月23日 23:50
  • 4832

IAR 下的ICF文件配置

硬件:STM32F103ZET6 + 512Kbyte 外扩的SRAM  使用原子的内存管理函数给 EMWIN分配内存,分为内部RAM和外部RAM两个内存池 define region RAM_reg...
  • zh9454
  • zh9454
  • 2016年07月22日 15:17
  • 1619

写在“五一”之解析IAR的ILINK链接器icf配置文件

http://blog.chinaaet.com/detail/27024.html  五一来了,三天小假期终于可以让大家歇一歇了(估计好多人都已经在规划着五一出行计划了或者已经在旅途中了)...
  • freudlv
  • freudlv
  • 2013年10月30日 23:59
  • 1308

EWARM IAR5.4编译链接过程, 程序运行阶段, ICF ilink配置文件

编译链接过程 编译器, 汇编器和链接器完成将代码转换成可执行文件的过程. 编译过程 首先是编译器和汇编器, 这是链接之前的工作, 生成可重定向的目标文件, 进而可以生成库文件: 命...

IAR 中 icf 文件详解

EWARM 5.xx的链接器ILINK及其配置文件.icf EWARM 5.xx中的链接器称为ILINK。ILINK可以从ELF/DWARF格式的目标文件中提取代码和数据,并生成可执行映像。在EWA...

IAR配置文件icf 浅析

sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理解ICF文件的内容尤其重要。 一个标准的ICF文件...
  • zhuomun
  • zhuomun
  • 2011年11月17日 20:35
  • 834

stm32存储器结构、 IAR 开发环境下的.icf 文件、.map文件 解析

新建 IAR环境  STM32工程 ,报错: Error[Lp011]: section placement failed: unable to allocate space for section...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IAR中ICF文件分析与应用
举报原因:
原因补充:

(最多只允许输入30个字)