IAR配置文件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 };         /* 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 */

你可能感兴趣的:(IAR,IAR)