首先简要介绍: 链接命令文件(.cmd文件)通过段定位控制命令,分配程序代码和数据运行存储空间。 链接命令文件有两个重要的指令:MEMORY和SECTIONS。 (1)、MEMORY 指出目标系统中物理上存在的存储空间的范围,即可供程序使用的存储空间范围。在默认状态下,PAGE0代表程序空间,PAGE1代表数据空间。 (2)、SECTIONS 1)、描述输入段如何组合成输出段。 2)、定义可执行程序的输出段。 3)、指出输出段存放在存储空间中的位置。 4)、允许重命名输出段。 .cmd文件编写的目的确定程序和数椐的装载运行空间,校验数据和程序代码的长度,定义输入/输出文件,安排系统中可用的存储器,程序段、数据段、堆栈以及复位向量和中断向量的地址空间。 链接命令文件通过段定位控制命令,分配程序代码空间、数据代码空间、程序运行空间、堆栈空间。 u.CMD文件命令格式 ØMEMORY:定义目标板物理存储空间分配,默认状态下,PAGE0为程序空间, PAGE1为数据空间。 ØSECTIONS:定义程序连接过程中各个输入段与输出段之间的关系,并给出输出段地址。①给出输入段组合成输出段的方式; ②定义可执行程序的输出段;③指出输出段存放在存储空间中的位置④允许重命名输出段。 下面分析一个简单的,helloword 经典的CMD /*************************************************
file name hello.cmd
map for new eZDSP 2812 Lori Heustess
DCS Product Applications 30 July 2001 M0/M1 Generic Linker Command File For C28x K1 this file assumes M0M1MAP = 1
**************************************************/ MEMORY
{
PAGE 0 : PROG : origin = 0x3f8000, length = 0x0023fff
RESET : origin = 0x0, length = 0x3f /*程序段,定义了起始地址和段的长度*/ PAGE 1 :
DATA : origin = 0x008000, length = 0x001fff
} SECTIONS
{
.reset : load = RESET, PAGE = 0
.text : load = PROG, PAGE = 0
.cinit : load = PROG, PAGE = 0
.vectors : load = PROG, PAGE = 0
.stack : load = DATA, PAGE = 1
.data : load = DATA, PAGE = 1
.ebss : load = DATA, PAGE = 1
.bss : load = DATA, PAGE = 1
.econst : load = DATA, PAGE = 1
.const : load = DATA, PAGE = 1
.cio : load = DATA, PAGE = 1
}
说明: .text: ;程序代码在第0页 reset ;复位在第0页
.cinit: ;初始化变量在第0页
.pinit: ;初始化参数在第0页 .vectors :一些向量在第0页
.bss: ;非初始化变量在第1页 .ebss ;初始化变量在第一页。
.const: ;常数在第1页
.
.sysmem: ;系统的东东,初始化一些东西,硬件的。 .cio: ;C语言I/O调用在第1页
.stack: ;堆栈在第1页
|