3 μC/oSⅡ实时任务模型的应用
交通信号灯控制系统是一个常见的实时应用系统。该系统根据时间控制十字路口信号灯的自动转换,其基本功能具有实时系统的基本特点。应用实时任务模型进行该系统的设计与实现。
3.1 系统功能、任务分解、任务通信
(1)应用程序功能说明
十字路口交通信号灯控制十字路口的车辆通过或停止。篇幅所限,控制方式简述如下:东西向绿灯亮时,南北向红灯亮,反之亦然,车辆按同方向灯控制通过。
(2)任务分解说明
设置两个任务分别表示东西向灯task_ew和南北向灯task_ sn。东西向灯任务和南北向灯任务优先级不同。东西向灯任务功能:申请南北向灯任务的同步信号量s_ sn,显示绿灯指定时间,设定显示红灯指定时间,向南北任务发送同步信号量;南北向灯任务功能:申请东西向灯任务的同步信号量s_ew,显示绿灯指定时间,设定显示红灯指定时间,向东西向任务发送同步信号量;两个任务通过两个信号量保持同步切换机制。
(3)任务间通信
根据任务分解得知,创建两个信号量,南北向灯信号量s_sn,初值=1;东西向灯信号量s_ew,初值=O。这样,通过任务代码申请信号量的顺序,可以将十字路口信号灯控制为如下顺序和变化周期:东西向信号灯绿灯一东西向信号灯红灯一南北向信号灯绿灯一南北向信号灯红灯。
(4)任务代码
东西向灯任务代码task_ew()简要流程如下,以下代码为无限循环代码。
①调用内核系统函数申请南北向灯信号量;
②东西向显示绿灯,南北向显示红灯;
③调用内核函数,任务睡眠指定时间;
④调用内核系统函数发送东西向灯信号量。
南北向灯任务代码task_sn()简要流程如下:以下代码为无限循环代码。
①调用内核系统函数申请东西向灯信号量;
②南北向显示绿灯,东西向显示红灯;
③调用内核函数,任务睡眠指定时间;
④调用内核系统函数发送南北向灯信号量。
3.2 任务创建
(1)任务函数代码编码完成后,调用系统函数0S-TaskCreate()创建任务task_sn和task_ew。
(2)每个应用任务的优先级不同,为了使任务按照设定的时间进行红绿灯显示切换,每个任务自动设定睡眠若干时间,任务在睡眠状态下显示状态保持不变。
3.3 任务与uC/OSⅡ实时内核连接
应用程序主函数的主要流程设计如下:
3.4 实时任务性能指标
若该应用系统具有信号灯自动控制改为手动控制,再由手动改为自动控制功能,需要进行如下设计:
(1)中断延迟
设置一个实时任务代表手动控制状态。当按下按键时产生中断,中断事件必须在时限内处理,睡眠上述两个红绿灯任务,将执行切换到手动实时任务。当需要切换到自动状态时,按下对应按键时产生中断,处理该中断,睡眠手动实时任务,唤醒两个红绿灯任务。这两个中断延迟时间对信号灯控制系统是很重要的性能指标,直接影响路口控制方式的切换是否顺畅。
(2)抢占延迟
有时根据交通流量变化,需要调整十字路口双方向红绿灯的切换时间。设置一个时间调整任务,该任务优先级较高,可根据每星期各天、各时段路口情况进行周期性动态时间调整。按指定时间触发事件,调度该任务执行。事件产生的频度就确定了该任务的执行时限,因此每次事件发生时,相应的处理任务必须及时响应处理,否则不满足时限要求,路口将陷于无控制状态。抢占延迟就反映了系统的响应及时程度。
4 结 语
提出的根据实时任务模型构建实时应用程序的方法,为基于嵌入式实时内核μC/OSⅡ构建应用程序,提供了一个简明、方便的技术思路和实现方法,该模型为实时应用程序开发提供一个实用解决方案。从应用程序范例的设计实现可得到随应用系统需求的改变;实时任务可动态进行增删;模块可拆卸。该方案已在我校计算机学院的教学实践中使用,具有较好的可操作性,开拓了软件开发的新视角。