dsp的cmd文件 c语言,TI DSP第二篇--cmd文件

(非原创,总结与网络)

用户通过编写CMD文件,来管理、分配系统中的所有物理存储器和地址空间。CMD文件,全名连接命令文件(linker

command files),以后缀.cmd结尾。

CMD文件其实就是用户的“声明”,包括两方面的内容:

1、用户声明的整个系统里的存储器资源。无论是DSP芯片自带的,还是用户外扩的,凡是可以使用的、需要用到的存储器和空间,用户都要一一声明出来:有哪些存储器,它们的位置和大小。如果有些资源根本用不到,可以视为不存在,不必列出来;列出来也无所谓。

2、用户如何分配这些存储器资源,即关于资源分配情况的声明。用户根据自己的需要,结合芯片的要求,把各种数据分配到适当种类、适当特点、适当长度的存储器区域

编写CMD文件

例子

/**********************************************************************************************/

-stack 200h/* #1*/

/**********************************************************************************************/

MEMORY/* #2声明存储空间*/

{

PAGE 0 ://PAGE 0程序存储空间

VECS: origin = 0000h , length =0040h/*中断向量*/  /*

#3 */

PROG  : origin = 0100h , length

=7F00h  /*片上FLASH  */  /* #4 */

PAGE 1 ://PAGE1数据存储空间

B2   : origin = 0060h , length

=0020h  /* DARAM B2块*/  /* #5 */

B0B1  : origin = 0200h , length

=0200h  /* DARAM B0块*/  /* #6 */

SARAM : origin = 0800h , length = 0800h /* SARAM块*/  /* #7  */

ExtSRAM : origin = 8000h , length = 8000h /*外部存储器*/  /* #8  */

}

/**********************************************************************************************/

SECTIONS                  /*

#9分配段到存储空间*/

{

.vectors :  > VECS  PAGE

0  /*中断向量表*/  /* #10 */.vectors代表输出段,>VECS同样可以写成load=VECS或VECS,和load平级的还有run,run定义输出段将会在哪里运行,语法run=VECS或run>VECS,当只出现一个run或load时表示地址相同

.text  :  > PROG  PAGE

0   /*代码*/  /* #11 */

.cinit  :  > PROG  PAGE

0          /* #12 */

.bss  : > SARAM PAGE

1          /* #13*/

这个其实是.bss

load =SARAM PAGE1

{

*.(bss)

}的简写。表示输入端和输出段同名

.stack  :  > B0B1  PAGE

1          /* #14 */

.extdata :  > ExtSRAM PAGE

1          /* #15 */ }

/**********************************************************************************************/

1资源清单

如上文所述,CMD文件包含两大内容,首先就是存储器的资源清单,或者说,系统中(电路板上)可用的存储器资源。

TI规定,CMD文件的资源清单用关键字“MEMORY”作为标识,具体内容写在后面的大括号{ }里面。如下面的形式:

MEMORY

{

PAGE 0:

xxx  : org = 0x1234 ,  length =

0x5678  /*This is my house.*/

PAGE 1:

aaa  : org = 0x1357 ,  length =

0x2468  /*My home here.*/

}

其中,MEMORY,PAGE n,org,length,包括冒号、等于号、花括号,都是关键字符,必不可少。

PAGE n表示把可用的资源空间再划分成几个大块,最多允许分256块,从PAGE0到PAGE 255。

很多关键字,还允许有别的写法,比如“org”可以写为“o”,“length”可以写为“len”。这些规定和其他细节,可以去查阅TI的pdf文档。

2资源的分配

首先,SECTIONS,PAGE,包括花括号、冒号,都是关键字符。注意:SECTIONS字符是复数形式。在花括号内,每一行最左侧的“.vectors”、“.text”、“.cinit”、“.bss”、“.stack”这些名称,包括小数点,都是TI默认的关键字符,只有“.extdata”是用户自己定义的名称。另外,“VECS”、“PROG”、“SARAM”、“B0B1”、“ExtSRAM”必须是

在MEMORY里声明过的资源名称。除此以外,有些字符也允许有别的写法,参见“Assembly

Language Tools User's Guide.pdf”,汇编语言工具指南。这些东西,就是前文所说,对存储器资源有要求的“状况”!前面声明的存储器资源,就是要分配给这些“状况”使用的!

段分为两类:已初始化段(Initialized Sections)和未初始化段(UninitializedSections)。以下是常用的一些段(不全):

“.vectors”, 表示“中断向量段”

“.text”,   编译后生成的二进制指令代码段

“.cinit”段,“对全局变量和静态变量初始化的常数”。

“.bss”,“保存全局变量和静态变量”,它属于“未初始化的”段,

“.stack”,堆栈,它属于“未初始化的”段,定位在数据空间。

“.extdata”,用户自定义的段,属于“未初始化的”

注意:

1.主要有PAGE0和PAGE1,PAGE0上的memory可以overlay到PAGE1 and so on

2. origin和length都是22bit的常数,在以前的一些dsp由于它的地址总线是16bit的,所以相应的origin和length只能为16bit的常数。

3. Sections以name开始,name就是定义的输出段。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值