您的位置:首页 > 其它

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

2015-08-04 15:21 246 查看
函数作用:就是申请让该任务延时一段时间后再在任务就绪表上登记,在此段时间里面该任务在任务就绪表的标志位会被置为‘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();        /* 进行任务调度,查找任务就绪表里面最高优先级的任务进行任务切换   */

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息