DSP

DSP的CMD文件讲解

2019-07-13 11:46发布

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