OSTimeTick()

void OSTimeTick (void)   //这个节拍服务函数是在OSTickISR函数中调用的,目的是在时钟节拍到来时,检查每个任务的任务控制块中的.OSTCBDly-1后是否为0,如果是,那么表明这个任务刚才是挂起的状态,此时应改变为就绪态
{
    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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值