1 引言
现代的数据采集模板的设计要求模板具有自主的管理、及时响应外部事件并且能够对采集数据进行实时预处理的能力。将数字信号处理器(DSP)设计在数据采集板上满足了这种需要。
选择DSP除了要充分考虑到DSP的数据处理能力和片内、片外的数据传输能力以外也不能忽略DSP的开发、调试环境。TI公司TMS320C5000和TMS320C6000系列DSP是当今DSP应用中的主流产品,不但拥有强大的数字信号处理能力而且与其配套的集成可视化开发环境CCS(Code Composer Stidio)更是使DSP应用程序的开发如虎添翼。
DSP/BIOS正是CCS的重要组成部分,它实质上是一种基于TMS320C5000和TMS320C6000系列DSP平台的规模可控实时操作系统内核。它也是TI公司实时软件技术eXpressDSP技术的核心部分。DSP/BIOS主要包含三方面的内容:多线程内核、实时分析工具、外设配置库。
充分利用DSP/BIOS这些特点将给数据采集程序设计带来革命性的变革。
2 数据采集程序设计分析
典型数据采集程序包括以下功能模块;引导自检模块、监控模块、主机通信模块、采集任务初始化模块、触发判断模块、采集任务执行模块、预处理模块。按照传统的编程方式,这些功能模块是以顺序结构组织在一起,各模块之间的调用和切换都是由各模块自身提供的代码来完成,这样使得应用程序各模块之间处于一种紧桐合状态,如果添加新的功能模块,不但因为要修改相关模块的调用代码而难于升级维护,并且新增模块也会明显影响到原有系统的时间响应特性。DSP/BIOS的出现提供了另外一种组织应用程序各功能模块的机制,它通过可配置的内核服务使各功能模块在系统调度器的安排下按照优先级的高低分时复用CPU资源,这种机制带来了应用程序可维护性的提高,而且也为能够提供更高级、方便的调试手段打下了基础。
DSP/BIOS在整个目标模板上主要起到两方面的作用:其一是实现主机调试环境对目标模板上运行的应用程序的实时监察和控制,其二是实现各线程之间的调度和线程间的通信。DSP/BIOS通过具体的核心模块而使这些作用得以发挥。
3 利用DSP/BIOS设计数据采集程序
核心模块中的实时调度模块用于生成线程对象。在利用DSP/BIOS设计应用程序之前,首先应对组成整个应用程序的各个功能模块进行线程类型划分。根据各功能模块触发方式和优先级的不同,可将它们划分为HWI、SWI、TSK和IDL四种线程对象,它们的优先级依次降低。同时,如果存在需要周期性触发的功能模块,可以将其设定为PRD或CLK线程对象。针对数据采集应用程序,同一执行路径的引导自检模块、监控模块因为仅在程序起始处执行一次,所以可设置成一般的TSK线程对象。任务初始化模块、采集任务执行模块、预处理模块要求有实时的时间响应,设置成SWI线程对象。一般情况下,同一线程对象的功能模块优先级可根据各模块执行的频率高低来划分,执行频率越高的功能模块对应线程优先级越高。由于任务初始化模块只在每次启动采集任务时执行一次,又考虑到采集任务模块一般要执行多次才进行一次预处理过程,因此可将任务初始化模块、预处理模块和采集任务模块的优先级按由低到高的顺序分配。作为决定数据采集过程起始时刻的触发模块,因为要及时判断触发条件进而实时响应外界触发信号,所以需要将其设置为优先级最高的HWI线程对象。至于主机通信模块,因为在目标模板没有执行采集任务时始终需要不间断地保持与主机的通信联系,所以将其分配为IDL线程对象。
下面给出基于DSP/BIOS设计的数据采集程序原理框图,其中核心模块的类型注于模块对象框的左上方自如果为线程对象,则对应的功能模块函数注于线程对象名的下方;各模块间触发关系由虚线箭头指出:外设与线程间通信由实时通信模块(如PIP)对象完成;由DSP/BIOS自动生成的核心模块对象用虚线框出。
需要指出的是框图下方五个由DSP/BIOS自动生成的核心模块对象是用于实时数据传输(RTDX)实现主机实时分析的,它们的存在只占用很少量的CPU负载而运行在优先级最低的线程,因此不会根本上影响目标模板上应用程序的运行效果。另外,在具体实现线程对象的触发及其它核心模块对象的调用时,应先通过DSP/BIOS的配置工具配置好应用程序所要用到的核心模块,然后查阅DSP/BIOS的用户手册,对相关的API函数进行调用即可。
图1 基于DSP/BIOS的数据采集程序原理框图
4 结论
将DSP/BIOS应用于数据采集板上DSP应用程序的设计不但能够缩短开发周期,而且因为DSP/BIOS的多线程机制使得应用程序的功能得到了彻底的分化,所以在这种情况下,当原程序增加新的功能时也不会影响到程序的实时响应特性,增强了程序的可维护性。另外,DSP/BIOS包含的实时分析工具集成于TI的Code Composer Studio开发环境当中,该分析工具在不打断DSP正常工作的情况下,捕捉并显示有关线程执行顺序、执行效率及CPU总负载量等方面的信息,简化了对程序调试和优化的过程。同时,DSP/BIOS提供的标