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(); //既然任务已经不再处于就绪任务,(任务调度),任务调度程序会执行下一个优先级最高的就绪任务 } }

你可能感兴趣的:(OS,任务调度,任务,delay)