加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

IAR中ICF文件格式

(2014-02-14 19:22:48)
标签:

it

分类: 我的博文

    EWARM 5.xx中的链接器称为ILINK。ILINK可以从ELF/DWARF格式的目标文件中提取代码和数据,并生成可执行映像。在EWARM 4.xx中,基本的代码和数据链接单元是segment,而对于ELF/DWARF格式而言,基本链接单元是section。ILINK根据ILINK Configuration File(*.icf)来分配这些sections。下面简要介绍ICF文件的格式和内容,以协助用户完成版本迁移。

    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 };
     place in RAM { readwrite };
     place in RAM { block HEAP, block CSTACK, block IRQ_STACK };
     place in ROM { section .text object myfile.o };
     place in ROM { readonly object myfile.o };
     place in ROM { readonly data object myfile.o };
 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有