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

本文介绍了UCOS-II操作系统中任务延时函数OSTimeDly()的作用和实现方式。该函数用于任务在指定时间后重新进入就绪状态,以实现任务切换,确保优先级较低的任务有机会运行。当延时期满或通过OSTimeDlyResume()取消延时,任务将立即恢复执行。
摘要由CSDN通过智能技术生成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值