打印

DSP CMD文件配置详解

[复制链接]
1011|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1 CMD文件的分配方法

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,可以放在数据页的任何地方。

2 举例说明.cmd文件的分配方法

      以下是仿真调试串行通信接口SCI时的.cmd文件的分配,已经在TMS320F2812仿真调试中得到了很好的应用。

MEMORY

{PAGE0: /*ProgramMemory*/

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:/*DataMemory*/

RAMM0:origin=0x000000,length=0x000400

RAMM1:origin=0x000400,length=0x000400

RAMH0:origin=0x3F9000,length=0x001000

,,,

}


SECTIONS

{/*Allocateprogramareas:*/

.cinit :>RAMH0 PAGE=0

.pinit :>RAMH0 PAGE=0

.text :>RAMH0 PAGE=0

.reset :>RESET,PAGE=0,TYPE=DSECT

Vectors :>VECTORS,PAGE=0,TYPE=DSEC

/*Allocateuninitalizeddatasections:*/

.stack :>RAMM0 PAGE=1

.ebss :>RAMH0 PAGE=1

.esysmem :>RAMH0 PAGE=1

.econst :>RAMM1 PAGE=1

.switch :>RAMM1 PAGE=1

,,,

}

为充分利用18k×16位的SARAM,本例将高地址的8k×16位的H0 SARAM区分成两部分,一部分用做存放程序放在PAGE0里,一部分用做存放数据放在PAGE1中以达到合理的分配;对实际仿真调试过程中的外围帧frame0,frame1,frame2等的分配因为篇幅问题就不做具体介绍了。

3 查看段的分配及使用情况

在cmd文件中包括各种各样的链接器选项,每种选项代表不同的含义。其中,使用-m选项可以创建一个扩展名为.map的链接器(存储器)分配映射文件,其语法为:-m filename(文件名)。链接器的map文件描述以下内容:

存储器结构

输入和输出段的定位

在重新定位后外部符号的地址

通过map文件可以查看各段的分配情况,包括段的起始地址,使用的字节数等配合cmd文件的使用,可确定各个段的使用情况,从而保证程序的正常运行和最小的空间使用。

4   VisualLinker可视化链接器

TI公司出品的DSP软件开发环境CCS还提供了一种可视化生成存储器配置文件的工具:VisualLinker可视化链接器。

如果程序原来包含了一个链接器命令文件(.cmd文件),则当创 建可视化链接文件的时候,原来cmd文件中的内存配置仍然会被使用。如果读者想修改内存配置,双击.rcp文件就会在CCS中打开可视化链接器的图形界面,调整每个内存模块的大小,直到认为合适,然后只需要重新连编,程序即可生成新的输出文件,重复上面的步骤,直到出现满意的结果。

5 总结

不同的DSP芯片内集成的存储器大小各异,但其配置方式是类似的。大家可通过查阅DSP芯片的数据手册,了解芯片内部存储空间大小。在实际的配置过程中,可根据开发程序的实际代码,正确的划分程序和数据空间中各段的大小,使其空间配置达到最优。

相关帖子

沙发
suzhanhua| | 2017-4-18 22:05 | 只看该作者

使用特权

评论回复
板凳
suzhanhua| | 2017-4-18 22:07 | 只看该作者
DSP CMD都是用的别人的

使用特权

评论回复
地板
firstblood| | 2017-4-18 23:52 | 只看该作者
这些基础的知识的还是要掌握的

使用特权

评论回复
5
minzisc| | 2017-4-19 22:27 | 只看该作者
怎么修改ram的空间?

使用特权

评论回复
6
minzisc| | 2017-4-19 22:32 | 只看该作者
想要运行变量多一些,修改哪里?

使用特权

评论回复
7
51xlf| | 2017-4-21 23:44 | 只看该作者
minzisc 发表于 2017-4-19 22:27
怎么修改ram的空间?

修改data部分。

使用特权

评论回复
8
i1mcu| | 2017-4-21 23:44 | 只看该作者
minzisc 发表于 2017-4-19 22:32
想要运行变量多一些,修改哪里?

调用现成的CMD就能满足。

使用特权

评论回复
9
pmp| | 2017-4-21 23:45 | 只看该作者
这个CMD应该学习,配置DSP关键

使用特权

评论回复
10
mmbs| | 2017-4-21 23:45 | 只看该作者
COFF这个格式固定吗?

使用特权

评论回复
11
1988020566| | 2017-4-21 23:46 | 只看该作者
跟着学习一下CMD文件。

使用特权

评论回复
12
51xlf| | 2017-4-21 23:47 | 只看该作者
minzisc 发表于 2017-4-19 22:27
怎么修改ram的空间?

ram是内置的吧。

使用特权

评论回复
13
i1mcu| | 2017-4-21 23:47 | 只看该作者
minzisc 发表于 2017-4-19 22:32
想要运行变量多一些,修改哪里?

有什么其他的要求?

使用特权

评论回复
14
pmp| | 2017-4-21 23:47 | 只看该作者
以前都是自己修改的。

使用特权

评论回复
15
mmbs| | 2017-4-21 23:47 | 只看该作者
以前都是没有怎么用过这个COFF

使用特权

评论回复
16
1988020566| | 2017-4-21 23:47 | 只看该作者
SECTIONS的内部分配都很重要

使用特权

评论回复
17
smilingangel| | 2017-4-22 13:12 | 只看该作者
这个文件配置的讲解还是蛮详细的

使用特权

评论回复
18
zhangbo1985| | 2017-4-22 14:24 | 只看该作者
这些分享非常好,,我直接收藏了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

81

帖子

1

粉丝