CMD 文件的设定
以.CMD 为扩展名的文件,这个文件的作用是用来分配存储空间的。由于 DSP 编译器
的编译结果是未定位的,DSP 也没有操作系统来定位执行代码,DSP 系统的配置需求也不
尽相同,因此我们根据实际的需求,自己定义代码的存储位置。打个通俗的比喻,就是我
们有一个仓库,现在需要把货物存放到仓库里面去,为了便于日后取用货物,我们将货物
分门别类,然后把它们存放到指定的位置去。把哪些货物放到哪个位置的规则,就是我们
的 CMD 文件的内容。
Cmd 文件分为 2 种,一种是分配 RAM 空间,将程序 LOAD 到 RAM 空间运行;另外
一种是分配 FLASH 空间,把程序固化在 FLASH 里运行。
先介绍几个伪指令:
.cinit 程序编译、链接时,该标号指示部分存放已明确初始化的全局变量和静态变量。
.const 程序编译、链接时,该标号指示部分存放已明确初始化的字符串常量、全局常量、
静态常量。
.switch 程序编译、链接时,该标号指示部分存放大型的 switch 语句的跳转表。
.text 程序编译、链接时,该标号指示部分存放可执行代码和浮点常数。
.bss 程序编译、链接时,该标号指示部分存放没有初始化的全局变量和静态变量。
.stack 程序编译、链接时,该标号定义为软件堆栈。
MEMORY 伪指令用来标识实际存在的目标系统中可被使用的存储器范围。每个存储
器范围具有名字、起始地址和长度。MEMORY 伪指令的一般语法为:
MEMORY
{
PAGE 0: name1[(attr)]; oringin=constant,length=constant;
PAGEn: name2[(attr)]; oringin=constant,length=constant;
}
PAGE 标识存储空间。用户可以规定多达 255 数据页。通常 PAGE0 规定为程序存储器,
PAGE1 规定为数据存储器。
Name 命名存储器范围。存储器可以是 1~8 个字符。在不同页上可以有相同的名字,但同
个页上名字必须唯一。
SECTIONS 伪指令的作用是:描述输入段怎样被组合到输出段内;在可执行程序内
定义输出段;规定在存储器内何处放置输出段;允许重命名输出段。SECTIONS 伪指令的
一
般语法是:
SECTIONS
{
Name: [property,property,property,…]
Name: [property,property,property,…]
Name: [property,property,property,…]
}
每一个以 name 开始的段的规格说明定义了一个输出段。在段名之后是特性列表,定义段
的内容以及是他们怎么分配的。段可能具有的特性如下:
1. 装载位置,规定段将被装载到存储器内何处;