TMS320C54x系列DSP存储空间的配置

chinapluss Post at 2006/3/13 12:46:00
在DSP的开发过程中,开发者难免会遇到DSP芯片内部存储器和片外扩展存储器的配置等问题。本文以TMS320C54x系列DSP为例,讨论DSP存储空间的分配问题。

    存储器空间

    'C54x系列DSP存储器分为三个独立选择的空间—程序、数据和I/O,其中程序存储器存放待执行的指令和执行中所用的系数(常数),可使用片内或片外的RAM、ROM或EPROM等来构成;数据存储器存放指令执行中产生的数据,可使用片内或片外的RAM和ROM来构成。I/O存储器存放与映象外围接口相关的数据,也可以作为附加的数据存储空间使用。这三个空间的寻址范围取决于DSP芯片地址线数目。例如,'C54x系列 DSP 从'C548开始,芯片有23根地址线,具有8M字节存储空间寻址能力。

    'C54x通过包含在处理器工作方式的状态寄存器(PMST)中的3个状态位,选择片内存储器作为程序空间或数据空间。这3个状态位是:

   

(1)MP/MC位。MP/MC=0,则片内ROM安排到程序空间;MP/MC=1,则片内ROM不安排到程序空间。    

(2)OVLY位。OVLY=1,则片内RAM安排到程序和数据空间;OVLY=0,则片内RAM只安排到数据存储空间。    

(3)DROM位。当DROM=1,则部分片内ROM安排到数据空间;DROM=0,则片内ROM不安排到数据空间。

    程序设计者可根据不同的需求,相应的配置这3个位,使系统的存储空间满足应用要求。同时,为了扩展'C54x系列DSP的寻址空间,还增加了一个额外的存储器映像寄存器—程序计数器扩展寄存器XPC,以及6条寻址扩展程序空间的指令。以TMS320C5410为例,它的程序空间分成128页面,每页64K字。该64K字程序空间分为两部分:一部分是公共的32K字,另一部分是各自独立的32K字。公共存储器为所有页面共享,每个页面独立的32K字存储器只能按指定的页面号寻址,这个页面号由XPC寄存器设定。

    'C54x系列的程序空间、数据空间和I/O空间的配置方式图略(详见《电子产品世界》2003.1)。

    'C5410片内有64Kx16bit的RAM,16Kx16bit的ROM,其中64K RAM分为4x2K字的双寻址RAM(DARAM)和7x8K字的单寻址RAM(SARAM)。

编写cmd文件

    TI 公司新的汇编器和链接器创建的目标文件采用一种 COFF(通用目标文件格式),该目标文件格式更利于模块化编程, 为管理代码段和目标系统存储器提供了强有力和灵活的编程方法。读者可以通过编写链接命令文件 (.cmd 文件)将链接信息放在一个文件中,以便在多次使用同样的链接信息时调用。在命令文件中使用两个十分有用的伪指令MEMORY 和 SECTIONS,来指定实际应用中的存储器结构和进行地址的映射。Memory 用来指定目标存储器结构,SECTIONS用来控制段的构成与地址分配。需要说明的是:

    (1)COFF文件格式在用汇编语言或高级语言编程时使用基于代码块和数据块的概念, 而不是一条条命令或一个个数据。

    (2)代码生成工具中,除编译器和链接器外,TI还提供了可将C语言编译为汇编语言程序的C编译器。

    查看段的分配及使用情况

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

    -m filename (文件名)

    链接器的map文件描述以下内容:

    *存储器结构

    *输入和输出段的定位

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

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

    Visual Linker可视化链接器

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

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

    结语

    不同的DSP芯片内集成的存储器大小各异,但其配置方式是类似的。读者可通过查阅DSP芯片的数据手册,了解芯片内部存储空间大小。

在实际的配置过程中,可根据开发程序的实际代码,正确的划分程序和数据空间中各段的大小,使其空间配置达到最优。

已有 0 位网友发表了看法