新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式软件开发之: 映像文件存储器映射调整

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

作者:时间:2013-09-30来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257027.htm

通过该Scatter文件描述符,创建了一个长度为0x2000的域,该域中的所有内容用0xffffffff填充。

注意

所指定的域值必须以字为单位。

· ZEROPAD 0:初始化一块内容全为0的内存区域,并将其作为一个输入段填充到ELF中。这样减少了在运行时将某段内存初始化为0的操作。

注意

只有根执行区可以使用ZEROPAD属性进行0初始化。对非根执行区使用ZEROPAD属性将出现警告信息,并且忽略该属性。

· UNINIT:指示该段为不能被初始化为0。

⑤ max_size为可选的参数,如果分配给域的存储器超过max_size字节,则它指示armlink生成错误。

⑥ -length如果指定的长度为负值,则base_address是域的结束地址。它通常与EMPTY一起使用,以表示在存储器中变小的栈。

当确定执行域属性时,注意以下几点。

① PI、OVERPLAY、FIXED和ABSOLUTE为并列关系属性,某一个执行域只能为这4种属性之一。如果没有指定,ABSOLUTE为其默认属性。

② 使用+offset格式的base_designator的执行区继承前一个执行区的属性(如果它是加载域中的第一个执行区,则继承所在加载域的属性,),或者具有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 dirlibname.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。

存储器相关文章:存储器原理




评论


相关推荐

技术专区

关闭