关于UCOSIII例程的问题

2019-07-21 02:24发布

在“UCOS实验2 UCOSIII移植”中,任务函数执行完之后,调用OSTimeDlyHMSM()会把当前的任务删除,我想请教的是任务执行完之后,
任务就绪表中没有这个任务,那么下一次的时候怎么执行?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
numbqq
2019-07-21 12:15
任务调用OSTimeDlyHMSM时会把当前任务状态设为 OSTCBCurPtr->TaskState = OS_TASK_STATE_DLY;同时会把当前任务挂在tick任务等待表中OS_TickListInsert(OSTCBCurPtr,ticks,opt_time,p_err);每个tick中断到来最后会导致OS_TickListUpdate被调用,在这个函数里面会判断延时时间是否到达
                case OS_TASK_STATE_DLY:
                     p_tcb->TickRemain = p_tcb->TickCtrMatch           /* Compute time remaining of current TCB       */
                                       - OSTickCtr;
                     if (OSTickCtr == p_tcb->TickCtrMatch) {           /* rocess each TCB that expires               */
                         p_tcb->TaskState = OS_TASK_STATE_RDY;
                         OS_TaskRdy(p_tcb);                            /* Make task ready to run                      */
                     } else {
                         done             = DEF_TRUE;                  /* Don't find a match, we're done!             */
                     }
                     break;

如果到达就会把该任务状态设为OS_TASK_STATE_RDY。

一周热门 更多>