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