uc/os-iii學習筆記---同時等待多個核心物件

JosephGodVim發表於2016-07-20

同時等待多個核心物件


前面我們講過都是等待單個核心物件,包括:訊號量、互斥訊號量、訊息佇列和事件標誌組。在UCOS–III中允許任務同時等待多個訊號量和多個訊息佇列,也就是說,UCOS–III不支援同時等待多個事件標誌組或互斥訊號量
一個任務可以等待任意數量的訊號量和訊息佇列,第一個訊號量或訊息佇列的釋出會導致該任務進入就緒態。

  • 一個任務可以呼叫函式OSPendMulti()函式來等待多個物件,並且可以根據需要指定一個等待超時值,函式OSPendMulti(),舉個例子
  • -
OSPendMulti((OS_PEND_DATA*  )pend_multi_tbl,//需定義的陣列,陣列的例子在此函式下面
            (OS_OBJ_QTY     )CORE_OBJ_NUM,  //核心物件數量
            (OS_TICK        )0,             //0就是一直等待下去
            (OS_OPT         )OS_OPT_PEND_BLOCKING,//物件未傳送時任務掛起等待,OS_OPT_NON_PEND_BLOCKING就是物件未傳送直接返回
            (OS_ERR*        )&err);        //同樣是返回的錯誤資訊
OS_PEND_DATA pend_multi_tbl[CORE_OBJ_NUM];//定義一個陣列,陣列大小推薦使用巨集定義方式定義
pend_multi_tbl[0].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem1;//等待訊號Test_Sem1
pend_multi_tbl[1].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem2;//等待訊號Test_Sem2
pend_multi_tbl[2].PendObjPtr=(OS_PEND_OBJ*)&Test_Q;//等待訊息Test-Q

相關文章