微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式软件开发之: 映像文件存储器映射调整

嵌入式软件开发之: 映像文件存储器映射调整

时间:08-30 来源:3721RD 点击:

执行区继承前一个执行区的属性(如果它是加载域中的第一个执行区,则继承所在加载域的属性,),或者具有ABSOLUTE属性。

③ 不能为执行域显式指定RELOC属性。该属性只能从前面的执行域或父区继承才能具有RELOC属性。

④ 被指定了PI或OVERLAP属性的执行域,不能有重叠的地址范围。但对于ABLOUTE和FIXED属性的执行域,ARM编译器不允许有重叠的地址范围。

⑤ RW段默认使用压缩属性。如果不想链接器对该段进行压缩,必须在Scatter文件中使用NOCOMPRESS显示声明。

⑥ UNINIT指定执行区中的ZI输出节(如果有)不被初始化为0。使用它可以创建包含未初始化数据或存储器映射I/O的执行区。

5.输入段描述符

输入段由以下部分组成。

· 模块名称,如目标文件名称、库成员名称或库文件名称。模块名称可以使用通配符。

· 输入段名称,或输入节属性,如READ-ONLY或CODE。

图13.13显示了输入段描述符的基本组成。

BNF语法为:

input_section_description ::=

module_select_pattern

["("

("+" input_section_attr | input_section_pattern)

([","] "+" input_section_attr | "," input_section_pattern))*

")"]

其语法说明如下。

① module_select_pattern

这是由文字文本构成的模式。"*"通配符匹配0个或多个字符,而"?"匹配任何单个字符。匹配不区分大小写。

使用*.o可以匹配所有对象。使用*可以匹配所有目标文件和库。

当满足下列条件之一时,链接器认为module_selector_pattern与输入段匹配。

· 包含输入段的目标文件与module_selector_pattern匹配。

· 包含输入段的库成员名称(不带路径名)与module_selector_pattern匹配。

· 从其中提取段的库全名(包含路径名)。如果名称包含空格,使用通配符可以简化搜索。例如,使用*libname.lib匹配C:\lib dir\libname.lib。

另外,ARM链接器支持特殊的模块选择程序模式".ANY",允许将输入节分配给执行区,而无需考虑其父模块。使用.ANY以任意分配方式填充执行区。

注意

最好不要依赖编译程序生成的或ARM库代码使用的输入段名。因为,这些名称在每次编译之间可以变化,例如编译选项的改变或编译器版本发生变化,都可能引起输入段名称的变化。

② input_section_attr

输入段属性符定义了一个用逗号隔开的模式类别。该类表中的每个模式定义了输入段名称或输入段属性匹配方式。当匹配模式使用输入段名称时,它前面必须使用符号"+",而符号"+"前面紧接的逗号可以省略。

输入段属性不区分大小写。可以是下列属性之一:

· RO-CODE;

· RO-DATA;

· RO,同时选择RO-CODE和RO-DATA;

· RW-DATA;

· RW-CODE;

· RW,同时选择RW-CODE和RW-DATA;

· ZI;

· ENTRY,包含ENTRY点的节。

可以识别以下同义词:

· CODE代表RO-CODE;

· CONST代表RO-DATA;

· TEXT代表RO;

· DATA代表RW;

· BSS代表ZI。

可以识别以下伪属性:

· FIRST;

· LAST。

如果对输入段的排列顺序有特殊的要求,如特定的输入段必须是域中的第一个输入节,而包含校验和的输入段必须是最后一个输入段,可以使用FIRST和LAST标记执行区中的第一个和最后一个段。

FIRST或LAST伪属性必须放在属性列表的最后。

特殊的模块选择程序模式".ANY"允许在不考虑其父模块的情况下,将输入段分配给执行域。使用一个或多个".ANY"模式以任意分配方式填充执行域。在大多数情况下,使用单个".ANY"相当于使用"*"模块选择属性。

在分散载入描述文件中不能使用两个"*"选择属性。但是,可以使用两个变形的选择程序,例如,*A和*B,也可以将.ANY选择属性与模块选择属性一起使用。*模块选择属性的优先级比.ANY高。如果删除了文件中包含*选择属性的部分,.ANY选择属性才能在链接时起作用。

在解析所有其他(非.ANY)输入段描述并且将输入段分配给最匹配的执行区之后,才解析使用.ANY模块选择程序模式的input_section_descriptions。如果有一个以上.ANY模式,则链接程序尽可能多地填充第一个.ANY,然后开始填充下一个.ANY。

每个未被分配的剩余输入段将被分配给具有以下特性的执行区:

· 最大的剩余空间(由max_size的值和已分配给该区的输入段的尺寸确定);

· 匹配.ANY的input_section_description;

· 与输

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top