DSP 的.CMD 文件配置
2010-03-08 19:12
DSP 芯片以其极高的精度,性能及运算速度等无与伦比的优点使它得到了十分广
泛的应用,TMS320F2812 是 TI 公司生产的到目前为止用于数字控制领域的最好
的 DSP 芯片,在对它的仿真开发过程中,编译器生成的代码和数据要由链接器分
配到合适的存储空间,通常链接器的命令文件.cmd 文件是由用户自己编写的,
编写不当,就会使仿真开发不能进行,TI 公司虽然在《TMS320C28x Optimizing
C/C++ Compiler User’s Guide 6》和《TMS320C28x Assembly Language Tools
User’s Guide 6》做了介绍,但内容却比较散乱而且要求读者对整个开发系统
要有较全面的认识,这对于初学者来说是比较困难的。下面以 TMS320F2812 芯片
为例,结合具体的仿真调试实例加以说明使大家能够既快速又准确的掌握.cmd
文件的分配方法。
1 存储空间的配置
TMS320F2812 的 DSP 存储器分为三个独立选择的空间-程序空间、数据空间和 I/O
空间,其中程序存储器存放待执行的指令和执行中所用的系数(常数),可使用片
内或片外的 RAM、ROM 或 EPROM 等来构成;数据存储器存放指令执行中产生的数
据,可使用片内或片外
的 RAM 和 ROM 来构成;I/O 存储器存放与映象外围接口相关的数据,也可以作为
附加的数据存储空间使用。
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
1 是 TMS320F2812 的存储空间分布。
2CMD 文件的分配方法
TI 公司新的汇编器和链接器创建的目标文件采用一种 COFF(通用目标文件格
式),该目标文件格式更利于模块化编程,为管理代码段和目标系统存储器提供
了强有力和灵活的编程方法。用户可以通过编写链接命令文件(.cmd 文件)将链
接信息放在一个文件中,以便在多次使用同样的链接信息时调用。在命令文件中
使用两个十分有用的伪指令 MEMORY 和 SECTIONS,来指定实际应用中的存储器结
构和进行地址的映射。Memory用来指定目标存储器结构,Memory下可以通过PAGE
选项配置地址空间,链接器把每一页都当作一个独立的存储空间。通常情况下,
PAGE0 代表程序存储器用来存放程序,PAGE1 代表数据存储器,用来存放数据。
由编译器生成的可重定位的代码和数据块叫做“SECTIONS”(段),SECTIONS 用
来控制段的构成与地址分配。对于不同的系统配置,“SECTION”的分配方式也
不相同,链接器通过“SECTIONS”来控制地址的分配,所以“SECTIONS”的分配
就成了配置.cmd 文件的重要环节。以下是对“SECTIONS”的定义及分配的详细
介绍。
(1)
被初始化的“SECTIONS”(包括数据表和可执行代码)
.text 它包括所有的可执行代码和常数,必须放在程序页;
.cinit 它包括初始化的变量和常量表,要求放在程序页;
.pinit 它包括全局构造器(C++)初始化的变量和常量表,要求放在程序页;
.const 它包括字符串、声明、以及被明确初始化过的全局和静态变量,要求放
在低地址的数据页;
.econst 它是在使用大存储器模式时使用的,包括字符串、声明、以及被明确初
始化过的全局变量和静态变量,可以放在数据页的任何地方。
.switch 它包括为转换声明设置的表格,可以放在程序页也可以放在低地址的数
据页。
(2)未被初始化的“SECTIONS”(为程序运行中创建和存放的变量在存储器中
保留空间)
.bss 它为全局变量和静态变量保留空间。在程序开始运行时,C 导入路径把数据
从.cinit 节复制出去然后存在.bss 节中,要求放在低地址的数据页;
.ebss 它是在远(far)访问(只用于 C)和大存储模式下使用,它为全局变量和静态
变量保留空间。在程序开始运行时,C 导入路径把数据从.cinit 段复制出去然后
存在.ebss 节中,可以放在数据页的任何地方;
.stack 为 C 系统堆栈保留空间,这部分存储器为用来将声明传给函数及为局部
变量留出空间,要求放在低地址的数据页;
.system 动态存储器分配保留空间。这个空间用于 malloc 函数,如果不使用
malloc 函数,这个段的大小就是 0,要求放在低地址的数据页;
.esystem 动态存储器分配保留空间,这个空间用于外部 malloc 函数,如果不使
用外部 malloc 函数,这个段的大小就是 0,可以放在数据页的任何地方。
3 举例说明.cmd 文件的分配方法
以下是仿真调试串行通信接口 SCI 时的.cmd 文件的分配,已经在 TMS320F2812
仿真调试中得到了很好的应用。
MEMORY
{PAGE0:
RAMH0:origin=0x3F8000,length=0x001000
RAML0:origin=0x008000,length=0x001000
RAML1:origin=0x009000,length=0x001000
ROM:
origin=0x3FF000,length=0x000FC0
RESET: origin="0x3FFFC0",length=0x000002M
VECTORS:origin=0x3FFFC2,length=0x00003EM
PAGE1:
RAMM0:origin=0x000000,length=0x000400
RAMM1:origin=0x000400,length=0x000400
RAMH0:origin=0x3F9000,length=0x001000
,,,
}
SECTIONS
{
.cinit :{ } > RAMH0 PAGE=0
.pinit :{ } > RAMH0 PAGE=0
.text :{ } > RAMH0 PAGE=0
.reset :{ } > RESET,PAGE=0,TYPE=DSECT
Vectors :{ } > VECTORS,PAGE=0,TYPE=DSEC
.stack :{ } > RAMM0 PAGE=1
}
为充分利用 18k×16 位的 SARAM,本例将高地址的 8k×16 位的 H0 SARAM 区分成
两部分,一部分用做存放程序放在 PAGE0 里,一部分用做存放数据放在 PAGE1
中以达到合理的分配;对实际仿真调试过程中的外围帧 frame0,frame1,frame2
等的分配因为篇幅问题就不做具体介绍了。
4 查看段的分配及使用情况
在 cmd 文件中包括各种各样的链接器选项,每种选项代表不同的含义。其中,使
用-m 选项可以创建一个扩展名为.map 的链接器(存储器)分配映射文件,其语
法为:-m filename(文件名)。链接器的 map 文件描述以下内容:
存储器结构
输入和输出段的定位
在重新定位后外部符号的地址
通过 map 文件可以查看各段的分配情况,包括段的起始地址,使用的字节数等配
合 cmd 文件的使用,可确定各个段的使用情况,从而保证程序的正常运行和最小
的空间使用。
5 VisualLinker 可视化链接器
TI 公司出品的 DSP 软件开发环境 CCS 还提供了一种可视化生成存储器配置文件
的工具:VisualLinker 可视化链接器。如果程序原来包含了一个链接器命令文
件(.cmd 文件),则当创
建可视化链接文件的时候,原来 cmd 文件中的内存配置仍然会被使用。如果读者
想修改内存配置,双击.rcp 文件就会在 CCS 中打开可视化链接器的图形界面,
调整每个内存模块的大小,直到认为合适,然后只需要重新连编,程序即可生成
新的输出文件,重复上面的步
骤,直到出现满意的结果。
6
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
不同的 DSP 芯片内集成的存储器大小各异,但其配置方式是类似的。大家可通过
查阅 DSP 芯片的数据
手册
华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载
,了解芯片内部存储空间大小。在实际的配置过程中,
可根据开发程序的实际代码,正确的划分程序和数据空间中各段的大小,使其空
间配置达到最优