ZHCU875Z August 2001 – October 2023 SM320F28335-EP
链接器在目标存储器中为每个输出段分配两个位置:即加载位置和运行位置。它们通常是相同的,用户也可以认为每个段只有一个地址。在目标存储器中放入输出段并向其分配地址的过程被称为放置。有关加载位置和运行位置不同的更多信息,请参阅节 8.5.6。
如果用户不指示链接器如何分配某个段,它会使用默认算法放置该段。通常,链接器会将段置于所配置存储器中的任何合适位置。用户可以在 SECTIONS 指令中进行定义,覆盖某个段的默认放置位置,并提供有关如何分配的指令。
用户可通过指定一个或多个分配参数来控制放置。每个参数均包含一个关键字、一个等号或大于号(可选)和一个值(可选择置于括号中)。如果加载位置和运行位置不同,则关键字 LOAD 之后的所有参数均适用于加载位置,关键字 RUN 之后的所有参数均适用于运行位置。分配参数包括:
绑定 | 为段分配一个具体地址。
|
指定的存储器 | 将段分配到在具有指定名称(如 SLOW_MEM)或属性的 MEMORY 指令中定义的一个范围内。
|
对齐 | 使用 align 或 palign 关键字指定,该段必须始于一个地址边界。
|
分块 | 使用 block 关键字指定,该段必须置于符合分块系数的两个地址之间。如果段太大,则始于地址边界。
|
页 | 指定要使用的存储器页(请参阅节 8.5.8)。如果未指定 PAGE,链接器会将已初始化的段分配到 PAGE 0(程序存储器),将未初始化的段分配到 PAGE 1(数据存储器)。
|
对于负载(通常是唯一的)分配,请使用大于号,并省略负载关键字:
.text: > SLOW_MEM
.text: {...}> SLOW_MEM
.text: > 0x4000
如果使用多个参数,则可以按如下方式将它们串到一起:
.text: > SLOW_MEM align 16 PAGE 2
也可以选择使用圆括号来提高可读性:
.text: load = (SLOW_MEM align(16)) page 2
用户也可以根据输入段规范,确定输入文件中可合并构成输出段的段。请参阅节 8.5.5.3。