首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DSP算法标准及其应用(2)

DSP算法标准及其应用(2)

3 通用算法标准
  TIDSP算法标准包括许多规则和准则。一种算法为了实现与遵循标准的其他算法相兼容,必须遵循算法标准规则,同时为了便于程序的可读性和维护,也强烈要求遵循算法编写准则。算法标准共有34条规则和若干条准则,详细情况请参阅文献[1],笔者着重讨论算法标准中有关多任务的规定。
  规则1 所有的算法必须遵循由于使用C编程语言而带来的运行时约定。
  该规则并不要求算法必须用C语言实现,实际上算法可以完全用汇编语言实现。但是,算法必须能在C语言中调用,同时,也必须遵循C语言的运行时约定部分重要的算法都不是仅用一个函数实现的,同其他复杂的软件一样,算法软件也是由许多内部函数组成。这些内部函数不必全部遵循C语言的RTC,只需最顶层的接口函数遵循C语言的RTC即可。同时,也要保证接口函数不会通过调用内部函数改变C语言的RTC。
  规则2 所有的算法在一个占先的环境下(包括时间片占先)具有可重入性。
  该规则比较抽象,需要先了解几个概念才容易理解。
  “重入性”是一个程序的属性,他允许多个线程同时使用程序的相同拷贝。简而言之,代码不具有记忆性,相同的输入参数不论在什么情况下得到的函数结果都相同。
  “占先[2]”是指应用框架或操作系统具有依据模块或任务的优先级决定模块是否能被中断,并进行相应调度的能力,或指代码是否能被中断的特性。
  由于应用框架的多样性,代码的可重入性变的十分复杂。硬件平台有单通道、多通道之分,应用程序有多线程、多进程、多任务之分,应用框架有占先(又叫抢先)式环境和非占先式(常常指时间片轮讯)之分。在非占先环境中,算法函数可以自由地使用全局变量,不用担心由于函数在运行中被中断,从而造成的全局变量数据的混乱。在占先的环境下,如果在算法函数内部使用了全局变量,并且函数修改了该全局变量的值,则该函数不具有重入性。由于算法自身并不能知道所应用的环境的“占先性”,所以算法必须保证在所有的情况下,算法具有可重入性。实际中,算法是否具有可重入性的检查比较困难,因而,这需要算法开发人员遵循3条准则:
  一是算法只能修改堆栈中的或者实例对象的数05据;
  二是算法视全局数据和静态数据为只读数据;三是算法不能调用可自我修改的代码。
  在多线程和多任务下,还可通过禁止中断的方法,禁止任务的占先,来保证满足函数的可重入性。
  规则3 算法数据的引用必须是完全可重新定位的。也就是算法中不能有“硬编码”出现。
  因为DSP应用程序在最后生成可运行代码时,必须进行连接,在连接中对DSP代码进行存储空间分配,所以一个算法如果要顺利接入另一个系统,算法必须能够重新定位。这就要求算法中不能有“硬编码”存在。
  所谓硬编码,就是一个具有具体的物理地址的代码。算法中一旦有了硬编码,导致代码只能固定位于某一块或访问某一块内存,将使该算法不能重新定位,失去了可移植性。算法中对数据内存的访问,可以通过连接命令文件,定义一个符号,指向某一内存区域,当应用程序需要将算法重新定位时,只在命令文件中修改符号指向的内存地址即可。
  以上介绍的是多任务算法编程中相对重要的规定,限于篇幅,其他规定请参阅文献[1]。
  4 算法标准在实际中的应用
  笔者的硬件开发平台是基于2片TMS320VC5402 DSP的自研发板,软件开发平台是TI公司的CCS2.0,所有的算法使用ANSIC语言编写,框架应用程序使用C语言和汇编语言的混合编程,算法先通过软仿真调试,再进行硬仿真在线实时调试,最终的算法将成为通用的算法,可移植到其他的数字信号处理器上。基于上述思想,软件从算法标准的角度做了如下整体设计:
  (1)软件算法和框架应用程序相对独立。即,框架应用程序是一个相对独立的模块,从AD转换器数据的采集、中断的调用都属于框架应用程序的工作;算法仅对采集到的数据处理。算法是一个相对独立的模块。
  (2)每一个算法都有一个头文件(.h)和一个实现文件(.C),整个算法模块有一个算法接口模块。算法头文件支持重复包含功能,即头文件中用预处理指令做了防多重进入处理(#ifndef...#define...#endif)。
  (3)所有对片内存储器的访问都定义了相应的寄存器指针或结构指针,并通过参数传入应用程序,算法和程序函数中不出现具体的寄存器地址,有效防止代码中有“硬编码”。
  (4)全局变量如果是只读属性,即,只读取而不改变全局变量的值,则可以在函数中直接使用,否则,只能通过指针传入函数,函数体中禁止直接修改全局变量的值,保证了函数的可重入性。
  (5)串口和DMA的操作有自己相应的接口文件,算法通过调用接口函数进行外设操作。串口和DMA等外设的操作由框架应用程序控制。
  遵循DSP算法标准,对动态系统会有一些性能下降,但对静态系统没有显著的影响,笔者的系统采用的是静态方法,因而在实际系统中,性能改变不太明显。
  5 结 语
  TIDSP算法标准的出现,无论对算法提供商还是对算法集成商来说,在技术上都是一个进步。对目前繁杂的算法编写和市场应用是一个很好的规范,为DSP算法的开发和使用提供了一个较为行之有效的标准。相信随着DSP的算法标准的逐渐推广,市场上DSP算法组件会越来越多,DSP的应用会越来越广泛。
继承事业,薪火相传
返回列表