时间管理主要将任务进行延时,进入等待状态,以及取消延时,结束等待。
1、任务延时
调用OSTimeDly可以使任务进入等待状态,进行一段特定时间的延时,同时系统进行以一次任务调度,执行下一个优先级最高的就绪态任务,一旦时间期满或者其他任务调用了OSTimeDlyResume取消了延时,等待状态的任务就会进入就绪态。
void OSTimeDly (INT16U ticks)
{
INT8U y;
#if OS_CRITICAL_METHOD == 3 //为CPU状态寄存器分配内存
OS_CPU_SR cpu_sr = 0;
#endif
if (OSIntNesting > 0) { //检查是否中断
return;
}
if (ticks > 0) { //延时时间大于0
OS_ENTER_CRITICAL();
y = OSTCBCur->OSTCBY; //获取就绪表组
OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX; //将就绪表该任务为清0
if (OSRdyTbl[y] == 0) {//如果就绪表该字节为0,说明该组的任务都没有就绪
OSRdyGrp &= ~OSTCBCur->OSTCBBitY; //就绪组清零
}
OSTCBCur->OSTCBDly = ticks; //将当前任务