新闻中心

EEPW首页 > 测试测量 > 设计应用 > 基于ARM9和μC/OSII的多频道数据采集系统设计

基于ARM9和μC/OSII的多频道数据采集系统设计

作者:时间:2011-07-26来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/194823.htm

  各个频段的各个通道采集任务均设置两个数据缓冲区。双数据缓冲区为采样任务顺利存储提供了双重保证,使得采样工作一旦结束就有可用缓冲区,就可立即将数据存储而后进行下一次采集。也使得后续的数据处理任务减少数据等待时间,能迅速得到当前采样通道需要处理的数据,并在最短的时间内处理发送给下一级任务。

  采样、数据显示、命令扫描都涉及外围设备,是整个系统所有任务里面运行速度最慢的,针对采样任务设置双数据缓冲区可以很大幅度地改善由于采样速度慢而造成的系统速率下降问题,显示和命令扫描部分的优化设计将在下文中详细说明。

  3 内部软件调度算法

  系统内部各个频段命令如图3所示。命令扫描函数捕捉到用户命令后,对用户命令进行验证、分析、提取,而后将提取结果以广播的方式发送至各个频段的命令等待队列。该队列如得到新的命令,将用户命令发送给本队列下辖的各个采样任务函数,用户命令将立即得到执行,包括通道切换、变换采样周期、改变当前任务优先级、显示特定通道数据等。如没有得到新的命令,等待超时后采样任务按照原有方式继续工作。这也是一种智能化设计,以很简单的方式实现了按照用户命令随时对任何通道的查看、监督、操作、工作状态切换、通道切换、由单通道到所有通道并行实时采集切换等所有功能的任意切换。

图3 各个频段内部命令

  3.1 任务优先级设置及采样任务优先级动态调度

  μC/操作系统是基于优先级的抢占式操作系统,所有任务必须有各自独立且唯一的优先级[1]。命令扫描和数据显示分别设置为最高优先级和最低优先级。扫描函数的最高优先级可以确保随时对用户命令进行响应,而显示任务由于其运行速速慢,将其设置为最低优先级。只要系统设计合理,适当避免低优先级任务的饥饿现象,即可实现将用户有效信息显示输出。

  内部优先级设置规则是,低频段、中频段、高频段3个频段的任务之间优先级依次递减。低频段的采样周期明显比高频段长,在低频段的空闲时间里系统可以顺利地将CPU使用权切换给其他任务,使其他任务得到CPU使用权并执行。每个频段内部的各个任务的优先级从采样到数据存储、数据处理、数据提交依次递减。

  为了使得整个系统实现优先级动态调度也可以修改其他采样参数,在软件设计时将所有频段采样任务的优先级、采样周期以全局变量的形式在进入操作系统之前进行设置,并将其定义为volatile格式分配独立的变量存储地址。而后设立独立的扫描任务,来专门完成这些参数的判断、修改、存储和动态更新。这样便使得系统除了可以按照根据采样周期设计的初始化优先级和初始化参数运行外,还可以依据用户自身需要对各个频段、各个通道的采样任务优先级以及采样频率进行设置和修改。修改完并确认后,修改任务会保存、更新当前系统工作参数并退出操作系统,而后重新启动并初始化,整个采集系统将按照全新的状态开始工作。当然,在这里用户优先级和采样周期设置是受限的,必须符合上文提及的优先级规则及各个频段对采样周期的要求。

 3.2 任务时限设置

  为了对整个系统的时间调度进行优化,首先说明几个内部工作时间。i386体系和Linux2.5内核中操作系统节拍率都设置为1000 Hz[2]。在这里将μC/操作系统调度时间OS_TICKS_PER_SEC也设置为1000,也就是说操作系统的任务调度以ms为单位。内核CPU工作频率设置为400 MHz,即CPU机械周期以ns为单位。外设包括上位机命令扫描和上位机、下位机显示部分工作都以s为单位。μC/系统中任务切换、调度及延时都以系统节拍率为单位,而内部代码的运行是以机械周期为单位。内部任务时限可以以节拍律为单位,也可以以实时时间为基准,获得一个绝对时间差。

  单个采样任务通道内部只有采样任务需要时限设置。为了达到智能化,用消息队列的等待延时替代了采样任务时限,而该延时便是本通道的采样周期。其他的后续任务包括内存开辟、数据处理、数据发送,都依次等待上一级任务消息,受上一级任务钳制不设置任务时限。显示任务时限按ms设置为绝对时间差。



评论


相关推荐

技术专区