OS_CORE.C(3)
生活随笔
收集整理的這篇文章主要介紹了
OS_CORE.C(3)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OSTCBCur->OSTCBStat |= events_stat | /* Resource not available, ...無法獲得資源的話就將其掛起 */OS_STAT_MULTI; OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; //配置當前事件控制塊中的事件狀態標志為等待完成,因為這個事件即將被切換掉,進入掛起態OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB設置該任務掛起等待的時間為timeout時間,超時任務就被切換掉*/OS_EventTaskWaitMulti(pevents_pend); /* Suspend task until events or timeout occurs 暫停任務直到出現新的事件呼叫或者掛起時間到*/OS_EXIT_CRITICAL(); /*開中斷*/OS_Sched(); /* Find next highest priority task ready找下一個就緒的最高優先級任務 */OS_ENTER_CRITICAL(); /*關中斷*/switch (OSTCBCur->OSTCBStatPend) { /* Handle event posted, aborted, or timed-out對當前最高優先級的事件進行狀態判斷*/case OS_STAT_PEND_OK:case OS_STAT_PEND_ABORT: /*等待完成和等待終止都進行相同的處理*/pevent = OSTCBCur->OSTCBEventPtr; /*將當前任務控制塊中指向事件的指針賦值給pevent*/if (pevent != (OS_EVENT *)0) { /* If task event ptr != NULL, ...如果任務事件指針不為空,說明有任務就緒*/*pevents_rdy++ = pevent; /* ... return available event ..將這個事件返回到就緒事件數組*/*pevents_rdy = (OS_EVENT *)0; /* ... & NULL terminate return event array最后一個標志位結束符*/events_rdy_nbr++; /*將就緒事件的數目加1*/}else { /* Else NO event available, handle as timeout沒有事件是準備好的,按照超時處理*/OSTCBCur->OSTCBStatPend = OS_STAT_PEND_TO;/*將此時任務控制塊掛起狀態設置為時間用完狀態*/OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);/*將任務從事件等待隊列中刪除*/}break;case OS_STAT_PEND_TO: /* If events timed out, ...如果事件的時間用完了*/default: /* ... remove task from events' wait lists 將任務從事件等待列表中刪除 */OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);break;}
第二個圖主要是來返回消息的,與第一個不同。
第二個圖主要是來返回消息的,與第一個不同。
總結
以上是生活随笔為你收集整理的OS_CORE.C(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 任务间通信的基本知识
- 下一篇: OS_CORE.C(4)