OSQPend

OSQPend()函式用於任務等待訊息。

基本介紹

  • 中文名:QSQPend
  • 功能:用於任務等待訊息
  • 函式參數:pevent ,timeout等
  • 注意/警告:必須先建立訊息信箱然後才能使用
  • 注意/警告2:不允許在中斷中調用該函式
函式原型,功能,參數,返回值,注意/警告,範例,

函式原型

void *OSQPend(OS_EVENT *pevent, INT16U timeout, INT8U *err)

功能

訊息通過中斷或者另外的任務傳送給需要的任務。訊息是一個以指針定義的變數,在不同的程式中訊息的使用也可能不同。如果調用OSQPend()函式時,佇列中已經存在需要的訊息,那么該訊息被返回給OSQPend()函式的調用者,佇列中清除該訊息;若調用OSQPend()函式時,佇列中沒有需要的訊息,那么OSQPend()函式掛起當前任務,直到得到需要的訊息或者超出定義的操時時限。如果同時有多個任務等待同一個訊息,那么μC/OS-Ⅱ系統默認最高優先權的任務取得訊息,並且任務恢復執行。一個OSTaskSuspend()函式掛起的任務也可以接收訊息,但這個任務一直保持掛起狀態,直到通過調用OSTaskResume()函式恢復任務的運行。

參數

pevent 指向即將接收訊息的佇列的指針。該指針的值在建立該佇列時可以得到。
timeout 允許一個任務在經過了指定數目的時鐘節拍後還沒有得到需要的訊息時,恢復運行狀態。如果該值 為0,則表示任務將持續的等待訊息。最長的等待時間為65535個時鐘節拍。這個時間長度並不是非 常嚴格的,可能存在一個時鐘誤差,因為只有在一個時鐘節拍結束後,才會減少定義的等待逾時鐘節 拍。
err 指向包含錯誤碼的變數的指針。OSQPend()函式返回的錯誤碼可能為下述幾種之一:
OS_NO_ERR訊息被正確的接收。
OS_ERR_TIMEOUT訊息沒有在指定的等待時限內送到。
OS_ERR_EVENT_TYPE pevent不是指向訊息佇列的指針。
OS_ERR_PEVENT_NULL pevent是空指針。
OS_ERR_PEND_ISR 在中斷中調用該函式。雖然規定了不允許從中斷調用該函式, 但μC/OS-Ⅱ仍然包含了檢測這種情況的功能。

返回值

OSQPend()返回接收的訊息,並將*err置為OS_NO_ERR。若沒有在指定數目的時鐘節拍內接收到需要的訊息,OSQPend()則返回空指針,且將*err設定為OS_TIMEOUT。

注意/警告

1、必須先建立訊息信箱,然後才能使用。
2、不允許在中斷中調用該函式。

範例

OS_EVENT *CommQ;
void CommTask ( void *data)
{
INT8U err;
void *msg;
pdata=pdata;
for ( ; ;)
{
. .
msg=OSQPend(CommQ,100.&err);
if (err==OS_NO_ERR)
{
.
. /*在指定時間內接收到訊息*/ .
}
else
{
.
. /*在指定時間內沒有接收到訊息*/ .
} . .
}
}

相關詞條

熱門詞條

聯絡我們