Aprendizagem UCOS (5) - método de agendamento de rotação de fatia de tempo

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_ENcomo 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);..
     }
}

Supongo que te gusta

Origin blog.csdn.net/qq_52608074/article/details/122396396
Recomendado
Clasificación