时间片轮转调度器用于时间片轮转调度为函数OS_SchedRoundRobin(),
此函数由OSTimeTick或者OS_IntQTask()调用,函数在文件os_core.c中定义。
一、OSSchedRoundRobinCfg()函数
使能或失能时间片轮转调度功能
如果我们想要使用UCOSIII的时间片轮转调度的话不仅要将宏OS_CFG_SCHED_ROUND_ROBIN_EN置1,还需要调用函数OSSchedRoundRobinCfg(),函数原型如下
void OSSchedRoundRobinCfg (CPU_BOOLEAN en,//使能时间片轮转调度机制
OS_TICK dflt_time_quanta,//设置默认时间片长度,即系统时钟节拍个数,200HZ为5ms
OS_ERR *p_err)
二、OSSchedRoundRobinYield()函数
当一个任务想要放弃本次时间片的时候,就可以调用该函数,函数原型如下:
void OSSchedRoundRobinYield (OS_ERR *p_err)
函数OSSchedRoundRobinYield()使用示例如下:
void Task(void *p_arg)
{
OS_RR err;
while(1)
{
……
OSSchedRoundRobinYield(&err);
…..
}
}
三、一般编写步骤:
1、设置宏OS_CFG_SCHED_ROUND_ROBIN_EN为1,
2、调用函数OSSchedRoundRobinCfg()开启时间片轮转调度功能,并且设置时间片长度。
3、编写任务函数
注意:
OS_TICK就是使能时间片轮转时的时间片长度,为0时为默认长度
在使用时间片轮转时,两个任务的优先级要是一致的