基于μC/OS-II的无线调度策略分析与实现
2.2嵌入式实时操作系统调度管理
为完成调度机制的灵活实现,提高系统调度实时性,这里采用嵌入式操作系统对系统进行管理。μC/OS-II是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统,其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。它适用于小型控制系统,具有执行效率高、占有空间小、实时性能优良和扩展性强等特点,最小内核可以编译至2K左右。
µC/OS-II实时内核采用占先式调度策略,不支持时间片轮调度法,核心是始终运行就绪条件下的优先级最高的任务。在具体实现中就可以根据这一特点将无线调度系统划分为多个任务,每一个任务赋予一个明确的并且与其他任务不同的优先级,根据各个任务的优先级,动态地切换各个任务,从而保证了对实时性的要求。如果希望某个任务的优先级根据条件的变化而发生改变,则可以通过调用改变任务优先级的函数来实现。
3 调度任务划分及设计
3.1多任务划分
任务和中断的划分主要根据调度平台设备完成的功能来划分,要求每个任务职责清晰,任务间的信息交换和同步互斥应该简洁明了,任务优先级定义明确。
无线调度平台设备任务可划分为四个任务:设备声明任务,信息分发任务,信息接收任务,令牌轮循任务。设备声明任务主要完成设备身份认证,设备在网络中声明是主设备还是从设备,如果是主设备则进行调度平台星型网络的组建,从设备则直接加入新组建的网络。信息分发任务作用是将当前网络状态、设备状态和数据信息发送网络中指定设备。信息接收任务是依靠串口中断来触发的,作用是接收网络中的数据信息和主设备发送的或从设备返回的令牌。令牌轮循任务主要是针对主设备,当调度网络组建完成,主设备根据网络中节点信息(单独开辟存储区存储的节点号)进行令牌信息分发,一般情况是根据节点号从大到小,得到令牌的节点才是当前网络中的活动节点。对于从设备,令牌轮循任务仅完成令牌返回功能。
3.2多任务优先级裁决
在多任务系统的设计中优先级的裁决至关重要,如果优先级设定有误,难以保证调度策略的正确实施,严重影响调度精确性。基于μC/OS-II操作系统的任务优先级设计遵循以下原则:(1)紧急任务优先,(2)完成得快的任务优先,(3)优先级不能动态变化,(4)不要出现多个同一优先级的任务。
基于以上四点原则,分析无线调度系统任务,安排任务优先级示意图如图3所示,任务优先级由高至低依次为:信息接收任务,令牌轮循任务,信息分发任务,设备声明任务。在系统任务中设备声明任务只需定期进行发送声明信息,表明设备在线,其周期较长,故可安排较低优先级;信息接收任务由中断触发,为了提高调度精度,防止中断延迟时间过长,可安排信息接收任务为较高优先级,当中断发生确保能较快的切换到信息接收任务接收信息。令牌轮循任务功能单一,处理时间较短,故安排优先级高于信息发送任务。
图3 任务优先级示意图 |
μC/OS-II是基于抢占式内核,当一个任务正在执行时,如果任务就绪表中有更高级别任务就绪,就中止当前任务切换到高优先级任务。如图3所示,信息分发任务在执行过程中,信息接收任务就绪,系统立刻中止信息分发任务,保留当前状态在堆栈中,然后切换到高优先级的信息接收任务,信息接收完成再返回到信息发送任务继续执行。
3.3任务间信息交换和同步设计与实现
在嵌入式多任务系统中,多任务之间信息交换和同步主要通过消息邮箱、消息队列以及信号量来完成,μC/OS-II分别提供了相关函数供用户调用,如任务,消息,信号量的创建,消息和信号量的请求和发送等。
根据调度策略无线调度平台主从设备信息交换设计图如图4所示:
任务间信息交换和同步设计是无线调度机制实现的重要环节,在具体实现过程中主要利用μC/OS-II的消息队列函数,其中OSQPend()为消息请求函数,OSQPost()为消息发送函数。
串口中断与信息接收任务间通过消息队列进行信息传递代码实现如下,SERIAL2RecData作为是否接收信息标志位,由中断置位,有信息接收时,串口服务程序向信息接收任务发送消息。
void SERIAL2_ISR(void) interrupt 20 //串口接收中断服务程序
{ SERIAL2RecBuffer[SERIAL2RecBufferTail] = SBUF1;
SERIAL2RecData = 1; //接收数据标志位
}
void task_serial2(void) ADD_REENTRANT //串口服务程序
{ if(SERIAL2RecData == 1)
OSQPost(bt_msg_queue, (void *)pmsg);
}
评论