发布日期:2022-04-17 点击率:68
引言 随着DSP技术的不断发展和完善,数字信号处理的应用范围越来越广泛。工控、计算机、通信和消费电子产品中,都会找到它的影子。到了20世纪80年代后期,各个DSP的生产商都推出了自己的高级语言编译器。这使得利用高级语言开发DSP软件成为可能。 编译器的原理是通过特定的语法规则把高级语言书写的逻辑转化成特定硬件平台所认知的汇编语言。由于编译器的首要性能是依据一定的规则编译出逻辑正确的代码。这样在保证正确性的前提下,编译出的汇编代码冗余很难兼顾效率。在一些实时性要求比较高的场合,例如在语音图像处理方面,必须对某些关键的算法进行优化。本文以TI公司的DSP芯片TMS320C55X为例,介绍如何对一个工程进行优化。 在高级语言编译器出现以前,由于软件部分都是由汇编来完成,并且写出的代码性能都比较高,所以代码的优化在开发过程中已经完成,不需要把优化单独地作为开发的一个步骤。现在随着高级语言应用到DSP系统的开发中,在软件功能实现的基础上,软件执行效率的优化显得愈加重要。每个人在优化过程中使用的具体方法各有特点,但在总体上还是有一定的规范可寻。 (1)向C55X上移植所需的准备工作:数据类型的定义、intrinsic函数的使用、为适合多通道的应用所做的代码的修改。 (2)工程层的优化:对于函数体较小的函数使用"inline"限定词、数据的对齐。 (3)C函数层的优化:针对TMS320C55X系列芯片的内部结构;改变C代码使其能在硬件最大使用概率的条件下,降低算法的用时。 (4)部分算法的修改。 (5)部分函数的手工汇编。 向C55X上移植所需的必要工作 由于DSP硬件结构的约束,用C语言开发的代码在向其移植时,必须作相应的改动,来适应特定硬件平台的特点。总结移植所需要的工作,主要有以下几点: (2)Intrinsic函数的使用。由所定义的数据类型可以实现定点的数学运算,由于这些基本的计算被多次使用,所以TI公司提供了这些函数的优化汇编代码。在算法实现代码文件头中加入"#include (3)为适合多通道的应用所做的代码修改。在 DSP 上实现的有些算法,例如语音的编解码等,需要同时处理多个通道。由于硬件资源(内存等)在工程的设计阶段已经划分完毕,所以要求在算法内不能在有内存的动态分配。解决的方法是事先把需要动态分配内存的变量放到一个结构体当中,集中在工程的设计阶段分配好内存。例如,将有关编码需要动态分配内存的数据结构合并为一个独立的结构体。这样当有多个通道同时工作时,只要对每一个通道分别开辟一块内存,公用算法代码,就可以实现多通道的应用。 工程层的优化 在工程层的优化中一般使用以下两种技术:内嵌函数和数据对齐。 所谓的函数内嵌,是指用函数的本体代替函数的调用这一过程。这项技术去掉了复杂的函数调用过程来提高函数的执行效率,而付出的代价是增加了代码所占用的空间。
优化的一般步骤
笔者根据自己的实际工作经验,并参照其它比较成功的优化实例,总结了以下几个步骤,作为优化过程的参考。:
(1)数据类型的定义。由于C55X系列芯片是TI公司生产的定点DSP芯片,其中累加器为40位。为了实现定点小数的数学运算,定义一个typedef.h的文件,在typedef.h文件中定义了几种数据类型。Word16对应short型;Word32对应long型;Flag对应int型。
(1)内嵌函数
下一篇: PLC、DCS、FCS三大控
上一篇: 索尔维全系列Solef?PV