基于μC/OS-II的无线调度策略分析与实现
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);
}
接收任务与发送任务间通过消息队列进行消息传递代码实现如下,当OSQPend()接收到触发消息,开始接受数据报文,根据数据报文ID作出相应处理,如果接收到的是令牌数据报文则给信息分发任务发送一个消息,信息分发任务只有接收到此消息才可以进行信息分发。为防止令牌丢失,在信息分发任务中设置了一等待超时,超过一定时间没接收到发送消息,则自动返回令牌。
void task_bt_rcve(void *spdata) ADD_REENTRANT //信息接收任务
{ p_msg = (sSerial2Msg PTR_TYPE *)OSQPend(bt_msg_queue, 0, err);
switch(p_msg->pkt_ID){
case ZGB_PKTID_ANN: // 设备声明ID
……
case ZGB_PKTID_DISTRIBUTE: // 信息发布ID
……
case ZGB_PKTID_PASS_TOKEN: // 令牌传递ID
……
OSQPost(token_msg_queue, (void *)1);
}
void task_bt_send(void *spdata) ADD_REENTRANT //信息分发任务
{ OSQPend(token_msg_queue, 3*OS_TICKS_PER_SEC, err); //令牌事件驱动
……
if(err != OS_TIMEOUT) //等待超时
return_token(); //当数据发送完毕后返回令牌
}
4 调度误差分析
无线调度是基于精确时间同步的调度策略,主设备对每个从设备进行周期性的调度。考虑到在实际过程中上线设备数量、指令周期和硬件响应时间等因素对调度周期的影响,测试中将周期定为200ms,即分给每个接收到令牌设备的时间片为200ms,不管设备状态如何。具体测试方法为:主设备连接有线网络,将从设备发往主设备的数据依次发往与之连接的PC机,PC机显示接收到的报文信息和时间并计算间隔时间。经过对实际测试数据进行分析,无线调度系统调度误差可控制在65~15ms之间,基本满足无线调度精度要求。
5 结束语
无线调度系统是基于令牌轮循的调度机制,调度策略简单实用。在系统设计中,根据嵌入式实时操作系统μC/OS-II的特点,合理划分了调度任务,同时引入了多优先级任务裁决机制,从而较好的解决了调度策略的具体实现,极大的提高了调度精度和可靠性,使无线调度平台可广泛应用于工业自动化现场。
本文创新点:分析和研究了基于ZIGBEE技术的无线调度平台的调度策略,同时为满足实时性要求和调度机制的灵活实现,引入μC/OS-II嵌入式实时操作系统来设计和管理调度任务,系统调度精度达到应用要求。
参考文献
[1]晨风著.嵌入式实时多任务软件开发基础[M].北京:清华大学出版社,2003.9
[2] Jean J. Labrosse著,邵贝贝等译.嵌入式实时操作系统μC/OS-II [M].北京:北京航空航天大学出版社,2003.5
[3]宋寅卯 张青波.基于uC/OS—II的旋转体非接触
- 详解μC/OS-II如何检测任务堆栈实际使用情况(11-27)
- μC/OS-II 移植笔记 1(FreeScale 68HCS12 核单片机)(11-20)
- μC/OS-II 移植笔记 2(FreeScale 68HCS12 核单片机)(11-20)
- 嵌入式实时操作系统 μC/OS-II 在S12单片机上的移(09-12)
- 基于μCOS-II的USB主机系统设计(12-27)
- 基于μC/OS-II的VG2以太网和USB接口设计(11-08)