一、时间片轮转实现
#if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
void OSSchedRoundRobinCfg (CPU_BOOLEAN en,
OS_TICK dflt_time_quanta,
OS_ERR *p_err)
{
CPU_SR_ALLOC();
#ifdef OS_SAFETY_CRITICAL
if (p_err == (OS_ERR *)0) {
OS_SAFETY_CRITICAL_EXCEPTION();
return;
}
#endif
CPU_CRITICAL_ENTER();
if (en != DEF_ENABLED) {
OSSchedRoundRobinEn = DEF_DISABLED;
} else {
OSSchedRoundRobinEn = DEF_ENABLED;
}
if (dflt_time_quanta > (OS_TICK)0) {
OSSchedRoundRobinDfltTimeQuanta = dflt_time_quanta;
} else {
OSSchedRoundRobinDfltTimeQuanta = (OS_TICK)(OSCfg_TickRate_Hz / (OS_RATE_HZ)10);
}
CPU_CRITICAL_EXIT();
*p_err = OS_ERR_NONE;
}
#endif
这里的话实现原理简单可以分为几个步骤
-
判断参数
-
禁用cpu进入中断
-
利用系统的频率周期去设置时间片轮转的时间
-
使能cpu进入中断
这里面进入中断具体没太看懂,应该是为了切换轮转的任务准备的。主要意思应该是利用系统的频率周期来设置进入中断的时间,在中断去切换cpu的使用权。