UC/OS-II的函数------OSTimeDly

本文详细介绍了uCOS-II操作系统中的任务延时函数OSTimeDly()的使用方法及注意事项。该函数允许任务延时指定数量的时钟节拍,并触发任务调度,确保任务在延时期满后能按优先级进入就绪状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


功能:调用该函数的任务将自己延时一段时间并执行一次任务调度,一旦规定的延时时间完成或有其它的任务通过调用OSTimeDlyResume()取消了延时,调用OSTimeDly()函数的任务马上进入就绪状态(前提是先将任务调度后执行的任务执行到程序尾,且调用OSTimeDly的任务此时优先级最高)。



//将一个任务延时若干个时钟节拍
//描述:将一个任务延时若干个时钟节拍。如果延时时间大于0,系统将立即进行任务调度。延时时间的长度
//     可从0到65535个时钟节拍。延时时间0表示不进行延时,函数将立即返回调用者。延时的具体时间依
//     赖于系统每秒钟有多少时钟节拍(由文件OS_CFG.H中的常量OS_TICKS_PER_SEC设定)
//
//附加:调用该函数会使uCOS-II进行一次任务调度,并且执行下一个优先级最高的就绪态任务。任务调用
//	   OSTimeDly()后,一旦规定的时间期满或者有其它的任务通过调用OSTimeDlyResume()取消了延时,
//	   它就会马上进入就绪状态。注意,只有当该任务在所有就绪任务中具有最高的优先级时,它才会立即
//	   运行。
//
//参数:ticks 为要延时的时钟节拍数。(一个1到65535之间的数)
//
//注意:注意到延时时间0表示不进行延时操作,而立即返回调用者,为了确保设定的延时时间,建议用户设定
//	   的时钟节拍数加1。例如,希望延时10个时钟节拍,可设定参数为11。
//
//任务延时函数(时钟节拍数)
void  OSTimeDly (INT16U ticks)
{
#if OS_CRITICAL_METHOD == 3                      //中断函数被设定为模式3
    OS_CPU_SR  cpu_sr;
#endif    


    if (ticks > 0) {   //如果延时设定为0值,表示不想对任务延时,返回调用任务
        OS_ENTER_CRITICAL();		//关闭中断
        if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {  /* Delay current task        */
            OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
        }
		//非0值会使得任务延时函数OSTimeDly()将当前任务从就绪表中移除
        OSTCBCur->OSTCBDly = ticks;    //接着,这个延时节拍数会被保存在当前任务的OS_TCB中
        OS_EXIT_CRITICAL();		//打开中断
        OS_Sched();				//既然任务已经不再处于就绪任务,(任务调度),任务调度程序会执行下一个优先级最高的就绪任务
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值