APP下载

基于CCS环境的DSP程序开发及运行

2014-10-27段红英

无线互联科技 2014年9期

段红英

摘 要:随着DSP技术的快速发展,其应用程序的开发引起了更多人的关注。本文探讨了在主流的CCS环境下进行DSP程序开发的一般流程,并通过一个实例给出了用C语言编写的DSP应用程序在实际运行过程中无法得到有效输出的问题及解决方案。

关键词:CCS;DSP;CMD文件

1 引言

DSP一般认为有两种含义,一种是指DSP器件(Digital Signal Processor),另外一种是指DSP技术(Digital Signal Processing),下文提到的均为第一种含义。伴随全球信息化进程的不断推进使得人们对于信息处理的需求更加迫切,相应的推动了计算机技术、电子技术等学科的进步,越来越多的领域开始借助于DSP实现高速的数据处理、有效的设备控制等功能 [1]。DSP实际上是在对硬件设备进行必要的设置后通过软件编程的方法控制硬件进行操作和处理的,因此,一个DSP程序如何进行设计就变得非常重要。

2 DSP程序的开发及运行

DSP程序的开发需要一定的编程语言和开发环境, CCS(Code Composer Studio)是TI公司推出的DSP集成开发平台,该平台集成了编辑、编译连接、调试及仿真等功能,支持汇编、C语言,并提供多种实时分析和编程方法,是目前功能最全的DSP开发平台[2]。配合DSP的代码生成和代码调试等开发工具,我们可以在CCS下完成一个基本的DSP程序的设计。

2.1 DSP程序的开发流程

一般来讲,一个DSP程序的设计运行需要经过以下的操作流程:

⑴建立工程文件。

⑵编辑源文件、命令文件,库文件等。源文件可以采用C语言或汇编语言或者二者混合进行编辑,它是实现DSP程序功能的主体。CMD文件指定存储分配。库文件包含需要的一些系统函数或者数据定义。

⑶编译链接源程序,生成目标代码程序和可执行程序。尽管采用C语言会汇编语言作为编程语言,DSP程序的目标及可执行文件有其特有的格式设置,一般是COFF目标文件和COFF可执行文件。

⑷下载执行程序,观测运行结果。在程序编译好运行之前,需要将其载入目标扳。CCS的连接器输出的目标文件的后缀为.OUT。每次程序改动之后,都要进行重新编译和载入[4]。

2.2 DSP程序开发运行的要点

DSP程序区别于一般的汇编语言程序或C语言程序,在开发过程中有几点非常关键:

⑴在遵循基本的编程语法和规则的基础上,充分考虑DSP器件的特点。实际应用中需要大量的硬件设置,这些都要通过软件方式实现。其中,最关键的就是相关寄存器的操作,通过寄存器值的设置或读取,可以完成对很多硬部件的操作设定也就是DSP需要使用的功能的设计或设备工作状态的判定。因此,学会熟练的操作寄存器是DSP程序设计成功与否的关键。而DSP器件本身型号多种多样,不同系类的芯片也有很大的区别,所以一定要细心。

⑵熟悉相应的开发芯片的基本特征。一款DSP芯片上包含很多的部件,这些部件的有机配合完成了最终程序功能的实现。其中CMD文件的编写对于整个程序的顺利执行至关重要,因为所有的DSP程序最终都需要在DSP芯片的内部存储器上存储并最终运行,而DSP芯片的存储是有限的,因此,必须对程序中所涉及到的代碼和数据给出准确的存储映射,这样程序存储执行时才能有条不紊的进行。

⑶仿真实现的重要性。既然是通过软件的方式操纵硬件,在设计阶段,我们必须借助于仿真对程序进行测试,因此仿真器的使用非常关键,有了它,计算机和DSP芯片间能实现有效的沟通,设计出的程序才更准确。

3 C语言编写的DSP程序实例

3.1 DSP下C的特点

DSP下的C语言有着其自身的特点:

⑴DSP的C语言是标准的ANSIC,它不包括同外设联系的扩展部分,如屏幕绘图等。但在CCS中,为了方便调试,可以将数据通过printf函数的调用虚拟输出到主机的屏幕上。

⑵DSP的C语言的编译过程为,C编译为ASM,再由ASM编译为OBJ。因此C和ASM的对应关系非常明确,非常便于人工优化。

⑶DSP的代码需要绝对定位;主机的C的代码有操作系统定位。

⑷DSP的C的效率较高,非常适合于嵌入系统。

3.2 一个例子

正因为标准的C语言和DSP下的C语言使用有所区别,因此在运行过程中会出现一些问题,下面以安装F2812开发板的瑞泰创新实验系统作为程序开发对象,在CCS2.2环境下给出一个简单的C语言程序的运行给出说明,该程序实现简单的数据输出,且在TURBORC下调试通过,运行得到正确结果,程序命名为Cprogram,全文如下:

#include "stdio.h"

main()

{ printf("Hello C-world!\n");

printf(" ****\n");

printf(" *\n");

printf(" * \n");

printf(" ****\n");}

将这一程序移植到CCS下,建立同名的工程,CMD文件,选择库文件后进行编译链接,结果出现两个警告,程序得不到输出结果。这也是大部分学生在编写了DSP程序后编译时出现的警告信息。警告信息如下:

"CProgram.c", line 7: warning: last line of file ends without a newline

warning: creating output section .cio without SECTIONS specification

⑴警告信息的消除。第一个警告是因为DSP下的C程序最后一行必须是空行,因此在源程序最后一行末尾按回车键换到下一行即可。第二个警告是因为包含stdio.h中函数的.cio段在命令文件中未定义,将其加上后再编译,所有的警告消除,但程序仍然不显示结果。

⑵程序输出的显示。DSP下的printf函数非常占资源的指令,它的顺利执行需要栈(heap)的设置,因此,在命令文件中需要将-heap大小设为400h。此外,由于本例中要使用库文件,最初设定的是rts2800.lib,但是仔细考虑后发现rts2800.lib和rts2800_ml.lib有较为明显的应用区别,尽管都支持C/C++运行支持库,但rts2800_ml.lib支持的是大内存模式且在指针访问区间上更占有是,因此将库文件替换为rts2800_ml.lib后程序再经过编译链接下载运行后得出了最终的输出。

4 结论

DSP程序的开发是一项复杂的工作,相比传统的程序设计需要考虑的东西更多,更全面,因此,在学习中要坚持谨慎、细心,把握好每个细节,再能更好的完成特定功能的DSP程序开发。

[参考文献]

[1]王忠勇,陈恩庆.TMS320F2812DSP原理与应用技术[M].电子工业出版社,2012:1-9.

[2]何望春,蔡卫平.CCS仿真软件中的文件输入输出方法[J].中国科技信息,2012(2).

[3]周德卿.CCS集成环境下C与汇编的混合编程实现[J].微电子技术,2002(4).

[4]李建国.基于CCS的DSP软件开发方法[J].海军航空工程学院学报,2002(7).