CMD文件的编写

[复制链接]
2393|1
手机看帖
扫描二维码
随时随地手机跟帖
lfzhou1006|  楼主 | 2011-10-9 15:20 | 显示全部楼层 |阅读模式
首先简要介绍:
链接命令文件(.cmd文件)通过段定位控制命令,分配程序代码和数据运行存储空间。
链接命令文件有两个重要的指令:MEMORYSECTIONS
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页

相关帖子

3B1105| | 2011-10-30 16:53 | 显示全部楼层
最愁CMD文件的编写了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

340

帖子

1

粉丝