ucos iii时间片轮转只能在同优先级的任务间有效果

时间:2022-12-21 21:14:48

ucos iii如何使用时间片轮转调度算法

(2016-07-15 15:05:47)
   
第一步:在mian()函数中打开条件编译#if OS_CFG_SCHED_ROUND_ROBIN_EN  
OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
       #endif
         其中 OSSchedRoundRobinCfg(DEF_ENABLED,1,&err); 
 函数参数一:DEF_ENABLED使能调度轮转法,DEF_DISBLED失能调轮转法。
        参数二:用来设置时间片长度。时间长度 = 参数值*时间节拍。其中时间节拍与系统时间频率OS_CFG_TICK_RATE_HZ,互为倒数。
第二步:创建任务时,通过设置(OS_TICK  )参数,来设置任务拥有几个时间片。
时间片轮转调度算法的作用及原理:
作用:用于相同优先级任务的切换。
原理:在ucos iii中任务优先级是依靠一个数组变量来实现的,数组变量的每一位代表一个优先级。当某一位为1时,代表当前优先级有任务已经处于就绪状态。等待CPU分配。当两个处于同一优先级的任务同时就绪时,则取任务链表中的第一个任务执行(每个优先级都拥有一个任务链表,该链表中任务的优先级均相同)。当该任务时间片用完时,将该任务插入任务链表尾部。由此就能完成时间片轮转调度了。