链接命令文件(.cmd文件)通过段定位控制命令,分配程序代码和数据运行存储空间。
链接命令文件有两个重要的指令:MEMORY和SECTIONS。
(1)、MEMORY
指出目标系统中物理上存在的存储空间的范围,即可供程序使用的存储空间范围。在默认状态下,PAGE0代表程序空间,PAGE1代表数据空间。
(2)、SECTIONS
1)、描述输入段如何组合成输出段。
2)、定义可执行程序的输出段。
3)、指出输出段存放在存储空间中的位置。
4)、允许重命名输出段。
.cmd文件编写的目的 确定程序和数椐的装载运行空间,校验数据和程序代码的长度,定义输入
/输出文件,安排系统中可用的存储器,程序段、数据段、堆栈以及复位向量和中断向量的地址空间。
链接命令文件通过段定位控制命令,分配程序代码空间、数据代码空间、程序运行空间、堆栈空间。
u .CMD文件命令格式
Ø MEMORY:定义目标板物理存储空间分配,默认状态下,
PAGE0为程序空间,
PAGE1为数据空间。
Ø SECTIONS:定义程序连接过程中各个输入段与输出段之间的关系
,并给出输出段地址。①
给出输入段组合成输出段的方式
; ②
定义可执行程序的输出段
;③
指出输出段存放在存储空间中的位置④
允许重命名输出段。
例如
.cmd文件应用
MEMORY
{
PAGE 0: PROG: origin = 0x1400, len = 0x2c00
;第
0页程序空间开始地址
0x1400,空间长度
0x2c00
VECT: origin = 0x0080, len = 0x80
;第
0页中断向量开始地址
0x0080,空间长度
0x80
PAGE 1: REGS: origin = 0x60, len = 0x1c
;第
1页寄存器空间开始地址
0x60,空间长度
0x1c
IDATA: origin = 0x80, len = 0x1380
;第
1页数据空间开始地址
0x80,空间长度
0x1380
EDATA: origin = 0x1400,len = 0x8000
;第
1页扩展数据空间开始地址
0x1400,空间长度
0x8000
EDATA1: origin = 0x9400,len = 0x4c00
;第
1页扩展数据空间开始地址
0x9400,空间长度
0x4c00
}
SECTIONS
{
.vectors: {}> VECT PAGE 0 ;中断向量在第
0页
.text: {}> PROG PAGE 0 ;程序代码在第
0页
.cinit: {}> PROG PAGE 0 ;初始化变量在第
0页
.pinit: {} > PROG PAGE0 ;初始化参数在第
0页
.bss: {} > IDATA PAGE1 ;非初始化变量在第
1页
.far: {} > IDATA PAGE1 ;长调函数在第
1页
.const: {} > IDATA PAGE1 ;常数在第
1页
.switch: {} > IDATA PAGE1 ;数据交换空间在第
1页
.sysmem: {} > IDATA PAGE1 ;
.cio: {} > IDATA PAGE 1 ;
C语言
I/O调用在第
1页
.stack: {} > IDATA PAGE 1 ;堆栈在第
1页
.csldata: {} > IDATA PAGE 1 ;
C语言宏调用在第
1页
}