嵌入式软件开发之: 映像文件存储器映射调整
区的属性;
· 从每个载入区派生的执行区;
· 每个执行区的执行地址和最大尺寸;
· 每个执行区的输入节。
描述文件的格式反映出载入区、执行区和输入节的层次结构。
1.BNF的表示法和语法
所谓BNF(Backus Naur Format)即Scatter文件所用的形式语言。表13.3概括了其所用的符号和语法规则。
表13.3 BNF语法
符 号 | 说 明 |
” | 引号用于表示BNF语法中的字符被用作普通字符。 例如,定义B+C,它只能替换为模式B+C。而定义B+C可以替换为模式BC、BBC或BBBC |
A ::= B | 将A定义为B。例如,A::= B+ | C 表示A相当于B+或C。 在其组件方面,::=表示法用于定义高级结构。每个组件可能还有一个::=定义,对更简单的组件进行定义。 例如,A::=B以及B::= C | D表示定义A相当于模式C或D |
续表
符 号 | 说 明 |
[A] | 可选元素A。例如,A::= B[C]D 表示定义A可以扩展为BD或BCD |
A+ | 元素A可以出现一次或多次。例如,A::= B+表示定义A可以扩展为B、BB或BBB等 |
A* | 元素A可以不出现或多次出现 |
A|B | 出现元素A或B,但不能同时出现 |
(A|B) | 元素A和B组合在一起。 这在使用 | 操作符时,或重复复杂模式时尤其适用。 例如,A::=(B C)+ (D | E) 表示定义A可以扩展为BCD、BCE、BCBCD、BCBCE、BCBCBCD或BCBCBCE |
2.Scatter文件语法概述
分散加载描述scatter_description被定义为一个或多个load_region_description模式:
Scatter_description ::=
load_region_description+
加载域描述load_region_description 被定义为载入区名称,可以选择性地在其后跟随属性、尺寸说明符以及一个或多个执行区描述:
load_region_description ::=
load_region_name (base_address | (+ offset)) [attributes] [max_size]
{
execution_region_description+
}
执行域描述execution_region_description 被定义为执行区名称,是一种基址规范,可以选择性地在其后跟随属性、尺寸说明符以及一个或多个输入段描述:
execution_region_description ::=
exec_region_name (base_address | + offset) [attribute_list] [max_size | –
length]
{
input_section_description*
}
输入段描述input_section_description被定义为源模块选择程序模式,可以在其后选择性地跟随输入节选择程序:
input_section_description ::=
module_select_pattern
[ (
(+ input_section_attr | input_section_pattern)
([,] + input_section_attr | , input_section_pattern))*
) ]
图13.10显示一个典型的分散载入描述文件的内容和组织结构。
图13.10 典型的分散载入描述文件的内容和组织结构
3.加载域描述
一个加载域具有以下属性:
· 名称:链接程序使用它识别不同的加载域;
· 基址:载入视图中的代码和数据的起始地址;
· 属性:可选;
· 最大尺寸:可选;
· 执行区列表:这些执行区标识执行视图中模块的类型和位置。
图13.11显示了加载域的描述。
BNF语法为:
load_region_description ::=
load_region_name (base_address | (+ offset)) [attribute_list] [ max_size
]
{
execution_region_description+
}
语法说明如下。
① load_region_name为加载域的名称。只有前31个字符有效。该名称仅用于识别每个域。
注意 | load_region_name与执行域exec_region_name不同,load_region_name不用于生成Load$$region_ |
② base_address是区中对象的链接地址。base_address必须是一个字对齐数值。
③ +offset描述基址,它从前一个加载域的末尾偏移offset个字节。offset的值必须能被4整除。如果是第一个加载域,则+offset表示该域的基地址是从0之后的offset字节开始。
④ attribute_list指定加载域内容的属性:
· PI:位置独立;
· RELOC:可重定位;
· OVERLAY:重叠;
· ABSOLUTE:绝对地址;
· NOCOMPRESS:代码不被压缩。
可以指定这些属性中的一项(除NOCOMPRESS外,其他4项属性为互斥关系)。默认的加载域属性是ABSOLUTE。具有PI、RELOC或OVERLAY属性之一的加载域可以有重叠的地址范围。对于ABSOLUTE加载域,armlink不允许重叠的地址范围。OVERLAY关键字允许在同一个地址有多个执行区。
注意 | ARM在RVCT中不提供重叠机制。要在同一个地址使用多个执行区,必须提供自己的重叠管理程序。 |
⑤ max_size:它指定加载域的最大尺寸。(如果指定了可选的max_size值,但分配给该区的字节超过max_size字节,armlink将生成错误。)
⑥ execution_region_description:它指定执行区名称、地址和内容。
4.执行域描述符
执行域具有以下一些属
- 基于DSP的导弹仿真器嵌入式组件设计(04-30)
- 为嵌入式软件建立统一软件系统框架的方法详介(05-23)
- 在VIM中实现对嵌入式软件的调试(08-06)
- 基于仿真的嵌入式软件白盒覆盖测试系统设计(08-26)
- 嵌入式软件运行剖面建模及测试用例生成(11-06)
- 嵌入式软件与硬件的集成测试过程研究(11-16)