程序清单 L6.8是OSEventTO()函数的源代码。当在预先指定的时间内任务等待的事件没有发生时,OSTimeTick()函数会因为等待超时而将任务的状态置为就绪。在这种情况下,事件的OSSemPend(),OSMboxPend()或者OSQPend()函数会调用OSEventTO()来完成这项工作。该函数负责从事件控制块中的等待任务列表里将任务删除[L6.8(1)],并把它置成就绪状态[L6.8(2)]。最后,从任务控制块中将指向事件控制块的指针删除[L6.8(3)]。用户应当注意,调用OSEventTO()也应当先关中断。
程序清单 L6.8 因为等待超时将任务置为就绪状态 |
void OSEventTO (OS_EVENT *pevent) |
{ |
if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { (1) |
pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY; |
} |
OSTCBCur->OSTCBStat = OS_STAT_RDY; (2) |
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; (3) |
} |