五、时间管理---任务延时[OSTimeDly()]--OS_TIME.C

时间:2021-02-15 00:49:36

函数作用:就是申请让该任务延时一段时间后再在任务就绪表上登记,在此段时间里面该任务在任务就绪表的标志位会被置为‘0’;为什么要延时,很简单就是为了进行任务切换,让比这个任务优先级更低的任务运行。而系统实时都运行任务就绪表里面优先级最高的任务。一旦规定的时间期满或者有其他任务通过调用OSTimeDlyResume()取消延时。任务就会马上进入就绪状态。

函数如何实现:很简单就是让当前任务的从任务就绪表了注销(把OSRdyTbl[ ]里面对应的优先级位置‘0’)。然后进行一次任务调度。

void OSTimeDly (INT16U ticks) reentrant

{
    if (ticks > 0) {              /* 判断延时时间是否大于0 */
        OS_ENTER_CRITICAL();  //关闭中断
        if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {     /* 将任务就绪表对应的任务优先级位置0*/
            OSRdyGrp &= ~OSTCBCur->OSTCBBitY;   
        }
        OSTCBCur->OSTCBDly = ticks;        /*把要延时的时间放到任务控制块的OSTCBDly里面,用在系统时钟滴答来减减使任务退出延时 */
        OS_EXIT_CRITICAL();   //打开中断
        OSSched();        /* 进行任务调度,查找任务就绪表里面最高优先级的任务进行任务切换   */
    }
}