{
OS_TCB *ptcb;
OSTimeTickHook(); //
ptcb = OSTCBList; //时钟节拍到来时,将控制块双向链表的第一个控制块取出(并不是节拍之前运行的任务)
while (ptcb->OSTCBPrio != OS_IDLE_PRIO) { //空闲任务处于控制块双向链表的最后一个,如果取出的控制块为空闲任务的控制块,那么已经取到最后一个了,就结束
// OS_ENTER_CRITICAL();
if (ptcb->OSTCBDly != 0) { //
if (--ptcb->OSTCBDly == 0) { //
if (!(ptcb->OSTCBStat & OS_STAT_SUSPEND)) { //检查任务是否处于强制挂起状态,如果是,那再挂起一个时钟节拍,否则就将它就绪
OSRdyGrp |= ptcb->OSTCBBitY;
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
} else { //
ptcb->OSTCBDly = 1; //
} //
}
}
ptcb = ptcb->OSTCBNext; //下一个任务控制块
// OS_EXIT_CRITICAL();
}
// OS_ENTER_CRITICAL(); //
OSTime++; //节拍计数器+1
// OS_EXIT_CRITICAL();
}