Uso
Quando precisamos que duas tarefas tenham a mesma prioridade, isso estará errado em circunstâncias normais, mas com o método de agendamento round-robin de fatia de tempo, ele pode ser executado normalmente.
Passos
1. Defina a macro OS_CFG_SCHED_ROUND_ROBIN_EN como 1, chame para OSSchedRoundRobinCfg()
habilitar o agendamento round-robin da fatia de tempo
Se quisermos usar o agendamento round-robin da fatia de tempo do UCOSIII, não apenas precisamos definir a macro OS_CFG_SCHED_ROUND_ROBIN_EN
como 1, mas também precisamos chamar a função OSSchedRoundRobinCfg()
para habilitar ou desabilitar o UCOSIII:
void OSSchedRoundRobinCfg (CPU_BOOLEAN en,//打开或者关闭
OS_TICK dflt_time_quanta,//时间片长度,系统时钟节拍个数
OS_ERR *p_err)//错误码
Código de erro :
OS_ERR_NONE 调试成功
OSERR_ROUND_ROBIN_1 当前优先级没有其他就绪任务
OS_ERR_ROUND_ROBIN_DISABLED 未使能时间片轮转调度功能
OS_ERR_YIELD_ISR 在中断调用了本函数
2. Ao OSTaskCreate()
criar uma tarefa, ajuste o parâmetro OSTICK time_quanta para definir a duração da fatia de tempo da tarefa.
Desista da função de fatia de tempovoid OSSchedRoundRobinYield (OS_ERR *p_err)
Podemos chamar esta função para descartar esta fatia de tempo:
void Task(void *p_arg)
{
OS_RR err;
while(1)
{
……
OSSchedRoundRobinYield(&err);
…..
}
}