嵌入式软件开发之: 映像文件存储器映射调整
执行区继承前一个执行区的属性(如果它是加载域中的第一个执行区,则继承所在加载域的属性,),或者具有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;
· 与输
- 基于DSP的导弹仿真器嵌入式组件设计(04-30)
- 为嵌入式软件建立统一软件系统框架的方法详介(05-23)
- 在VIM中实现对嵌入式软件的调试(08-06)
- 基于仿真的嵌入式软件白盒覆盖测试系统设计(08-26)
- 嵌入式软件运行剖面建模及测试用例生成(11-06)
- 嵌入式软件与硬件的集成测试过程研究(11-16)