DSP环境下C语言编程的优化实现

DSP环境下C语言编程的优化实现

ID:41032287

大小:165.50 KB

页数:5页

时间:2019-08-14

DSP环境下C语言编程的优化实现_第1页
DSP环境下C语言编程的优化实现_第2页
DSP环境下C语言编程的优化实现_第3页
DSP环境下C语言编程的优化实现_第4页
DSP环境下C语言编程的优化实现_第5页
资源描述:

《DSP环境下C语言编程的优化实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、内部公开▲DSP环境下C语言编程的优化实现1引言  DSP(DigitalSignalProcessor,数字信号处理器)是一种具有特殊结构的微处理器。自20世纪80年代初诞生以来,DSP在短短的十多年间里得到了飞速的发展。随着DSP性能价格比和开发手段的不断提高,DSP已经在通信和信息系统、信号与信号处理、自动控制、雷达、军事、航空航天、医疗、家用电器等许多领域得到了广泛的应用。  与单片机相比,DSP多用于算法比较复杂、乘加运算量比较大的应用,如通信、雷达、音视频处理等。为了追求代码的高效,过去一般用汇编语言来编制DSP程序。随着DSP应用范围不断延伸

2、,应用的日趋复杂,汇编语言程序在可读性、可修改性、可移植性和可重用性的缺点日益突出,软件需求与软件生产力之间的矛盾日益严重。引入高级语言(如C语言、C++、Java),可以解决该矛盾。在高级语言中,C语言无疑是最高效、最灵活的。各个DSP芯片公司都相继推出了相应的C语言编译器。  鉴于DSP应用的复杂度,在用C语言进行DSP软件开发时,一般先在基于通用微处理器的PC机或工作站上对算法进行仿真,仿真通过后再将C程序移植到DSP平台中。  按照软件开发的顺序,相应的优化工作包括两个部分:一是仿真环境中的优化,二是DSP目标环境中的进一步优化。本文主要探讨的是前

3、者,给出了在DSP开发环境下有效C语言编程的策略,以获得最高效的编译代码;并针对策略,设计了具体实例,并比较了不同策略在TMS320C54xCCS(v1.2)和TMS320C6000CCS(v1.2)环境下编译的结果。2DSP开发环境下有效C编程的策略  基于通用微处理器的PC机环境中的优化工作是针对C程序的通用特性来考虑的。这方面的优化工作主要包括数据类型选择、数值操作优化、快速算法、变量定义和使用优化、函数调用优化、程序流程优化以及计算表格化等。2.1数据类型  标准C语言提供了丰富的数据类型整型、浮点、枚举、指针、结构、联合等。编程面对的问题是使用怎

4、样的数据类型使编译生成的代码小、效率高。  整型有signed和unsigned之分,分别称为char,shortint,int,longint,enum。ANSIC没有规定每个类型的大小,它只是声明short深圳市中兴康讯电子有限公司内部资料不得外传内部公开▲int不大于int,long不小于int,enum和int具有相同尺度。这种模糊的定义影响了程序由一个处理器向另一个处理器的移植操作。为了避免这种影响,比较良好的编程风格是将数据类型按类型定义(typedef)在一个头文件中,当移植时只需要更改头文件即可:  使用浮点数是非常危险的,除非系统有浮点协

5、处理器或专门针对浮点设计的处理器,使用浮点变量会使编码尺度膨胀。即使使用协处理器,消耗时间也很多。同时,浮点数的存储空间是可变的。IEEE单精度浮点需4B,双精度需8B,扩展双精度需10B。一些小的CPU的交叉编译器仅支持单精度浮点型。  避免浮点操作的方法一般是采用浮点运算定点化,用定点函数运算替代浮点操作。对于定点DSP的操作,应仔细考虑硬件的限制。同时,在编程时要大致估计数据的范围,做到所采用的数据类型刚好满足要求,并尽量做到在一个CPU指令周期内完成数据载入。  由于DSP常采用可变的定位方式,结构的不适当声明会浪费很多RAM和ROM空间。如下图示

6、例中两种不同声明方式,用sizeof()分析,在C54x中分别为14和12(单位为字),在C6201中分别为56个字节和40个字节,可见不适当地声明会导致内存空间的浪费。  当然,一些高性能的编译器,可根据内存空间优化各个变量的位置,但此时变量存储的次序可能和它们定义时的次序不同。2.2数值操作优化对数值操作优化,主要特别注意以下几点:(1)深圳市中兴康讯电子有限公司内部资料不得外传内部公开▲用比特的移位操作来代替2次幂整数的乘除法运算更为有效;(2)用查表法代替三角函数运算。特别是在FFT等程序中,同时将一些运行时计算的参数做成查找表或常数数值,这样可以

7、将运行时的计算转化为编译时的计算,从而提高运算效率;(3)当使用浮点设备时,尽量使用浮点数据类型,这能够减小定点处理单元的负担;(4)尽量避免数值的上下溢出,除非是算法本身的需要。2.3变量定义及使用优化  C语言把局部变量放在堆栈中,这种访问是间接的,因此较慢。更为有效的方法是将变量放在堆(heap)中,有两种方法实现:一种是声明为全局变量;另一种是声明变量为static。同时,要注意提高全局变量的重复利用率。  对于需要多次重复访问的变量,如for循环中的变量值,一般可以设置为register变量。声明变量为register能够提高效率,但必须小心使用

8、。在某些编译器中,优化器会自动分配一些变量为register。  

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。