资讯详情

【Ucos-III源码分析】——时间片轮转

一、实现时间片轮转

#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

这里的实现原理可以分为几个步骤

  1. 判断参数

  2. 禁用cpu进入中断

  3. 利用系统的频率周期设置时间片旋转的时间

  4. 使能cpu进入中断

我不进入中断了解不多,应该备切换轮换任务。主要意思是利用系统的频率周期设置进入中断的时间,并在中断之间切换cpu的使用权。

标签: 二极管dflt48a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台