相信大家如果刚学dsp一定对CMD文件很纠结吧,下面稍作解释:
CMD文件所描述的,就是开发工程师对物理存储器的管理、分配和使用情况。
由3部分组成:
1)输入/输出定义:.obj文件:链接器要链接的目标文件;.lib文件:链接器要链接的库文件;.map文件:链接器生成的交叉索引文件;.out文件:链接器生成的可执行代码;链接器选项
2)MEMORY命令:描述系统实际的硬件资源
3)SECTIONS命令:描述“段”如何定位
通常,我们不必完全自己编写CMD文件,不然太浪费开发时间,我们通常把TI官方的例子中的CMD文件拷贝过来,通过修改成为自己的cmd文件。下面是TI的一个CMD文件:
MEMORY
{
PAGE 0:
MMR : origin = 0000000h, length = 00000c0h
SPRAM : origin = 00000c0h,length = 0000040h
VECS : origin= 0000100h, length = 0000100h
DARAM0 : origin = 0000200h, length =0003E00h
DARAM1 : origin = 0004000h, length =0004000h
DARAM2 : origin = 0008000h, length =0004000h
DARAM3 : origin = 000c000h, length = 0004000h
SARAM0 : origin = 0010000h, length =0004000h
SARAM1 : origin = 0014000h, length =0008000h
SARAM2 : origin = 0018000h, length =0004000h
SARAM3 : origin = 001c000h, length =0004000h
SARAM4 : origin = 0020000h, length =0004000h
SARAM5 : origin = 0024000h, length =0004000h
SARAM6 : origin = 0028000h, length =0004000h
SARAM7 : origin = 002c000h, length =0004000h
SARAM8 : origin = 0030000h, length =0004000h
SARAM9 : origin = 0034000h, length =0004000h
SARAM10 : origin = 0038000h, length = 0004000h
SARAM11 : origin = 003c000h, length = 0004000h
SARAM12 : origin = 0040000h, length = 0004000h
SARAM13 : origin = 0044000h, length = 0004000h
SARAM14 : origin = 0048000h, length = 0004000h
SARAM15 : origin = 004c000h, length = 0004000h
CE0 : origin = 0050000h, length = 03b0000h
CE1 : origin = 0400000h, length = 0400000h
CE2 : origin = 0800000h, length = 0400000h
CE3 : origin = 0c00000h, length = 03f8000h
PDROM : origin = 0ff8000h,length = 07f00h
}
SECTIONS
{
.vectors : {} >VECS PAGE0
.cinit : {} >SARAM0 PAGE 0
.text : {}> SARAM1 PAGE 0
.stack : {} >DARAM0 PAGE 0
.sysstack: {} > DARAM0 PAGE 0
.sysmem : {} > DARAM1 PAGE 0
.cio : {} > DARAM1 PAGE 0
.data : {}> DARAM1 PAGE 0
.bss : {} > DARAM1 PAGE 0
.const : {} >DARAM1 PAGE 0
.csldata : {} > DARAM0 PAGE 0
}
因此,我们只需修改便可以成为自己的cmd文件。
下面稍作解释对上述文件:
MEMORY
{
PAGE 0:
xxx : org = xxxx, length= xxxx
......
PAGE 1:
aaa : org = xxxx, length = xxxx
......
}
其中,MEMORY,PAGE n,org,length,包括冒号、等于号、花括号,都是关键
字符,必不可少。
PAGE n表示把可用的资源空间再划分成几个大块,最多允许分 256块,从PAGE
0到 PAGE 255。
PAGE 0作为程序空间,把PAGE 1作为数据空间。
CMD文件中还可以写上注释,用“”包围起来,但不允许用“//”
关键字 PAGE 0或PAGE 1下面,可以是空白的。但不允许所有的CMD 文件的同一空间都是空白。
SECTIONS
{
.vectors : {} > VECS PAGE 0
.cinit : {} > SARAM0 PAGE 0
.text : {} > SARAM1 PAGE0
.stack : {} > DARAM0 PAGE 0
.sysstack: {} > DARAM0 PAGE 0
.sysmem : {} > DARAM1 PAGE 0
.cio : {} > DARAM1 PAGE 0
.data : {} > DARAM1 PAGE 0
.bss : {} > DARAM1 PAGE 0
.const : {} > DARAM1 PAGE 0
.csldata : {} > DARAM0 PAGE 0
}是资源分配。
cinit 存放C程序中的变量初值和常量;
const 存放C程序中的字符常量、浮点常量和用const声明的常量;
switch 存放C程序中switch语句的跳针表;
text 存放C程序的代码;
bss 为C程序中的全局和静态变量保留存储空间;
far 为C程序中用far声明的全局和静态变量保留空间;
stack 为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;
sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间
相信大家看完后对CMD文件应该有了初步了解!!!