Waiting for a message at a Queue, OSQPend()
程式清單 L6.22 是 OSQPend() 函式的程式碼。OSQPend() 函式首先檢查 ECB 是否是由 OSQCreate() 函式建立的 [L6.22(1)],接著,該函式檢查 message queue 中是否有消息可用 (即 .OSQEntries 是否大於 0) [L6.22(2)]。如果有,OSQPend() 函式將指向消息的指標複製到 msg 變數中,並讓 .OSQOut 指標指向佇列中的下一個單元 [L6.22(3)],然後將佇列中的有效消息數減 1 [L6.22(4)]。因為 message queue 是一個 circular buffer,OSQPend() 函式需要檢查 .OSQOut 是否超過了佇列中的最後一個單元 [L6.22(5)]。當發生當 .OSQOut 超過陣列的長度時,就要將 .OSQOut 重新調整到指向佇列的起始單元 [L6.22(6)]。這是我們呼叫 OSQPend() 函式時所期望的,也是執行 OSQPend() 函式最快的路徑。