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表示长度。后面也可以加上 F=0x0000或fill=0x0000,表示初始化该段内存中的值。
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的地址下面。若后面加上Align=32768表示对齐在第32768个字节地址处。
以下是其他常用段名:
.cinit 存放程序中的变量初值和常量
.const 存放程序中的字符常量、浮点常量和用const声明的常量
.switch 存放程序中switch语句的跳转地址表
.text 存放程序代码
.bss 为程序中的全局和静态变量保留存储空间
.far 为程序中用far声明的全局和静态变量保留空间
.stack 为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果
.sysmem 用于程序中的malloc 、calloc 、和realoc 函数动态分配存储空间
.text为可执行代码
SECTION目标文件中的最小单位为块,一个块就是最终在存储器映像中占据连续空间的一段代码或者数据。