任务的调度
Nucleus PLUS对任务的调度有两种方式,优先级调度和时间片调度。如图3所示。当一个更高优先级的任务就绪时,Nucleus PLUS中断低优先级的任务,保存现场,并先运行更高优先。

图3 任务调度示意图
级的任务,这就是抢占。通过优先级调度可以保障高优先级的任务优先运行。相同优先级的任务间也可以采用时间片的方式轮流使用CPU资源,用户只需指定每一个任务的时间片大小,Nucleus PLUS通过时钟中断来计算任务的运行时间,当任务的时间片耗尽后,Nucleus PLUS会自动进行任务切换。NucleusP LUS对任务的调度利用类似双向链表数组TCD_Priority_List数据结构实现。
系统软件设计
建立BSP
根据RTOS的编程模型,软件设计分两步走,首先建立BSP。即根据目标环境进行系统配置,建立板级支撑程序BSP(相当于标准PC的BIOS)。主要完成系统初始化及与硬件相关的设备驱动,引导目标机硬件到一个确定的状态。分别以Board_Init(),INTInitialize(),UARTInit(),LCDInit()等来实现。
软件功能描述及多任务功能划分
根据离子迁移谱仪的工作原理,软件必须实现实时数据采集(离子信号和各通道模拟量)、实时控制(离子管上温度的恒定控制、维持气路的恒定流量、还包括对系统中的高压电源、整机电流、整机温度、试纸状态等实时跟踪和控制)、键盘响应、菜单图形显示以及与PC机的通信接口等模块。其中前面2个模块的功能与时间密切相关,下面将功能具体化:
- a1每10ms完成一次串行A/D采样,对内部的16个通道采样数据保持同时采样。实时要求较高。
- b1采用CPLD每25ms开启一次门信号,采集1000个离子信号数据。实时要求很高。
- c110ms完成一次各个温度控制规律的计算,使各个温度维持在设定的点上。
- d1用户按下分析键后,几秒内解析馆内温度需达到的预定点,并且整个分析需在20秒内完成。
- e1对用户通过键盘下达的命令及时给与响应,并在液晶屏上给出对应的显示。
- f1对检测到的违禁成分立即给予报警。
- g1与PC机进行通信,通过PC机能够对存于串行flash中的样本库、工作参数等进行修改,或者对其存储的样本库及报警结果传送到PC机上。
依据DARTS设计方法,对这些功能要求,我们总共划分以下十个任务:
- MainTask:主任务,负责从主队列中收消息,根据消息类别与其他任务通信,激活不同的任务。
- UITask:图形界面显示任务。
- MCTask:多通道数据采集任务。
- RCTask:对温度的实时控制任务。
- MVTask:数据搬移任务。
- ANTask:分析处理任务。
- ALTask:报警处理任务。
- AVTask:等离子图处理任务。
- KBTask:键盘扫描任务。
- SCTask:与PC机通讯任务。
以NucleusPLUS为开发平台,首先以Application_Initialize(void*first_available_memory)为入口点,以上各个任务均在这里定义,其中的多通道数据采集、实时控制、以及分析任务用定时器来实现,键盘扫描用中断实现。
等离子图处理及波峰位置提取算法
对等离子图处理将直接影响迁移时间的提取,该部分是软件实现的难点之一。一个周期内采样的离子信号所产生的等离子图,往往具有干扰,含有许多毛刺,无法正确判断出波峰,也就无法得到迁移时间。为此,我们一个周期取1000个采样点,首先采用算法平均滤波法,对多个周期的采样信号做算术平均:y[i]=(y1[i]+y2[i]+⋯+yn[i])/n,去除随机干扰信号;而后,采用横向平均滤波法:y[i]=(y[i+1]+y[i+2]+⋯+y[i+m])/m,减少等离子图上的毛刺;在此基础上,再将多个由上述方法得到的y[i]值作平均。经过采样值的多次处理后,可得到相对清晰的等离子图。而要正确提取波峰位置,关键是要找出波峰。对波峰的提取,并非找最优值问题,因为当物质含有多种成分时,会出现多个峰,根据物质的基本性质,其所含成分一般不超过20种,所以需找出最多20个波峰。另外,处理后的等离子图也不是毫无毛刺,相距几十微秒的两个峰往往只有一个是真正的峰。为解决这一难题,我们首先找出第一个波峰,采用试探法测出这个峰的大致宽度,再找出假想的第二个峰,若两个波峰之间的距离小于第一个波峰的宽度,则认为第二个峰只是第一个峰的一个毛刺,抛弃第二个峰,继续找,否则,保留第二个峰,继续找第三个波峰,此时以与第三个峰相邻的峰的宽度作为比较对象;依此类推,直到找完所有的波峰为止。其中,用试探法测波峰宽的程序部分如下:

找出了波峰、波峰位置后迁移时间也就容易获得了。
结束语
实时操作系统内核的多任务机制不仅可以满足应用系统的实时性要求,而且简化了系统的开发设计过程,可以将一个复杂的问题分解成多个子问题,用任务来实现。在一定程度上保证了离子迁移谱仪的实时性和可靠性。但在实时多任务系统设计时,任务划分却是一门艺术,不同的人对同一系统的任务划分会不同,导致系统的性能也有所差异。究竟该如何划分任务,也需要在实际开发实时系统时不断地总结。本文主要介绍了基于Nucleus PLUS的离子迁移谱仪嵌入式系统的设计,在不久的将来,它将在毒品、爆炸物等探测领域发挥用武之地。