使用情况
当我们需要两个任务拥有同一个优先级时,普通情况他是会出现错误的,但是用了时间片轮转调度法,它就可以正常运行了。
操作步骤
1.宏OS_CFG_SCHED_ROUND_ROBIN_EN置 1,调用OSSchedRoundRobinCfg()
使能时间片轮转调度
如果我们想要使用UCOSIII的时间片轮转调度的话不仅要将宏OS_CFG_SCHED_ROUND_ROBIN_EN
置1,还需要调用函数OSSchedRoundRobinCfg()
使能或者失能UCOSIII:
void OSSchedRoundRobinCfg (CPU_BOOLEAN en,//打开或者关闭
OS_TICK dflt_time_quanta,//时间片长度,系统时钟节拍个数
OS_ERR *p_err)//错误码
错误码:
OS_ERR_NONE 调试成功
OSERR_ROUND_ROBIN_1 当前优先级没有其他就绪任务
OS_ERR_ROUND_ROBIN_DISABLED 未使能时间片轮转调度功能
OS_ERR_YIELD_ISR 在中断调用了本函数
2.在用OSTaskCreate()
创建任务时,其中调整OSTICK time_quanta参数设置任务的时间片长度。
放弃时间片函数void OSSchedRoundRobinYield (OS_ERR *p_err)
我们可以调用这个函数放弃本次的时间片:
void Task(void *p_arg)
{
OS_RR err;
while(1)
{
……
OSSchedRoundRobinYield(&err);
…..
}
}