DSP的CMD文件讲解

相信大家如果刚学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 0PAGE 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文件应该有了初步了解!!!

你可能感兴趣的:(DSP)