DSP中CMD文件理解

CMD的名称为链接命令文件(Linker Command Files),用来存放链接的配置信息,简称命令文件,CMD由三大部分组成:1、输入输出定义,2、MEMORY命令,3、SECTION命令

1、输入输出的定义:通过ccs的“BuildOption”菜单设置:.obj(链接的目标文件)、.lib(链接的库文件)、.map(生成的交叉索引文件)、.out(生成的可执行代码)。

2、默认C6678的CMD文件在F:\ProgramFiles\ti\ccsv8\ccs_base\c6000\include路径下面,也可以添加插件开发的CMD文件F:\ProgramFiles\ti\pdk_c667x_2_0_9\packages\ti\platform\evmc6678l\platform_test,打开platform_utils.cmd文件:

-heap:定义堆的大小,编译器提供的运行时支持库的一些函数(如malloc/calloc/realloc),允许运行时为变量动态分配存储器。这些存储器就放置在.system段的全局池(global pool)或堆(heap)中。这个动态存储池的大小仅仅受限与系统中实际的存储容量。

-stack:定义栈的大小,称系统栈(system stack),用于:1、保存函数调用后的返回地址;2、给局部变量分配存储空间;3、传递函数参数;4、保存临时结果;

以上2个选项都可以在project-build options的连接器选项中设置

3、MEMORY命令:描述系统的实际硬件资源,MEMORY是用来指定芯片的ROM和RAM的大小和划分出几个区间。PAGE0对应ROM,PAGE1对应RAM。PAGE里包含的区间名字与其后面的参数反映了该区间的起始地址和长度。

以上的L1PSRAM表示的段或者块的称号,它的起始地址为:0x0E00000,长度为0x7FFF。

MEMORY
{
PAGE0:name1[(attr)]:origin=constant,length=constant
name1n[(attr)]:origin=constant,length=constant
PAGE1:name2[(attr)]:origin=constant,length=constant
name2n[(attr)]:origin=constant,length=constant
PAGEn:namen[(attr)]:origin=constant,length=constant
namenn[(attr)]:origin=constant,length=constant
}

PAGE关键词对独立的存储空间进行标记,PAGE的最大值为255,实际应用中一般分为两页,PAGE0程序存储器和PAGE1数据存
储器。name存储区间的名字,不超过8个字符,不同的PAGE上可以出现相同的名字(最好不用,免的搞混),一个PAGE内不许有相同的name。attr的属性标识,为R表示可读;W可写;X表示区间可以装入可执行代码;I表示存储器可以进行初始话,什么属性代码也不写,表示存储区间具有上述的四种属性,基本上我们都选择这种写法。

例:

MEMORY
{
   PAGE 0: VECT:origin=0x8000,length=0x040
   PAGE 0: VECT:origin=0x8040,length=0x600
   PAGE 1: DATA:origin=0x8000,length=0x400

}

PAGE一般设置为0到1,分别为程序存储器和数据存储器的地址分配,VECT、DATA为块的名称,VECT表示程序存储器,DATA表示数据存储器,具有以上4种属性,origin表示起始地址,length表示长度。

4、SECTION命令:用来详细描述‘段’如何定位。

SECTIONS
{
    .vextors >VECT PAGE 0
    .text >PROG PAGE 0
    .bss >DATA PAGE 1
    .const >DATA PAGE 1
}

.vextors、.text、.bss 、 .const表示段名,.vextors >VECT PAGE 0表示vextors段下的程序放在VECT PAGE0的地址下面。

以下是其他常用段名:

.cinit 存放程序中的变量初值和常量
.const 存放程序中的字符常量、浮点常量和用const声明的常量
.switch 存放程序中switch语句的跳转地址表
.text 存放程序代码
.bss 为程序中的全局和静态变量保留存储空间
.far 为程序中用far声明的全局和静态变量保留空间
.stack 为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果

.sysmem 用于程序中的malloc 、calloc 、和realoc 函数动态分配存储空间

.text为可执行代码

SECTION目标文件中的最小单位为块,一个块就是最终在存储器映像中占据连续空间的一段代码或者数据。

猜你喜欢

转载自blog.csdn.net/u011441044/article/details/81121674