訊息佇列在任務間可以傳遞多條訊息,由3部分組成:事件控制塊、訊息佇列和訊息、
oseventtype=os_event_type_q時,描述的就是訊息佇列。
1.訊息指標陣列
訊息佇列的核心iushi訊息指標陣列。
osqsize: 陣列的長度;
osqenter:已存放訊息指標的元素數目;
osqstart: 指標,指向訊息指標的起始陣列;
osqout:指標,指向被取出訊息的位置,當它移動到與osqend相等時,被調整到指向陣列的起始單元
2種插入資料方式:
先進先出: osqin:插入, osqout:輸出;
後進先出: osqout;
2. 佇列控制塊
訊息指標陣列的管理: 訊息指標陣列的基本引數都記錄在乙個教佇列控制塊的結構中;
typedef struct os_q
struct os_q *osqptr;
void ** osqstart;
void ** osqend;
void ** osqin;
void ** osqout;
int16u osqsize;
int16u osqentries;
}os_q;
3. 建立訊息佇列
os_event osqcreate(
void * *start, //指標陣列的位址
int16u size // 陣列長度
);4. 請求訊息佇列
為了從訊息佇列中獲取訊息。函式原型:
void * osqpend( os_event *pevent,
int16u timeout,
int8u *err);
返回值: 訊息指標;
希望任務無等待地請求乙個訊息佇列,則需要呼叫osqaccept(),函式原型:
void osqaccept( os_event *pevent);
5. 向訊息佇列傳送訊息
osqpost():先進先出; osqpostfront():後進先出『
int8u osqpost(os_event *pevnet, void *msg);
int8u osqpostfront( os_event *pevent, void *msg)
任務希望以廣播的方式通過訊息佇列傳送訊息:函式原型:
int8u osqpostopt(os_event *pevent, void *msg, int8u opt);
6.清空訊息佇列
int8u osqflush( os_event *pevent);
7. 刪除訊息佇列
os_event *osqdel( os_event *pevent);
8. 查詢訊息佇列
int8u osqquery(os_event *pevent, os_q_data *pdata);
pdata:c存放狀態資訊的結構;
typedef struct os_q_data;
uCOS II郵箱和訊息佇列
1 ucos ii郵箱和訊息佇列 郵箱和訊息佇列是ucos ii中任務間的通訊機制,它可以使乙個任務或者中斷服務子程式向另乙個任務傳送以指標方式定義的變數。因具體的應用有所不同,每個指標指向的資料結構變數也有所不同。兩者都基於事件控制塊os event。與郵箱相比,訊息佇列在os event基礎上加...
UCOS II 訊息佇列學習一
訊息佇列通常可以應用以下兩個地方 1.儲存外部事件 外部事件由中斷收集,然後儲存到佇列。2.串列埠接收程式中的接收迴圈緩衝區,可理解為訊息佇列。使用乙個訊息佇列的步驟如下 1 建立乙個指向訊息陣列的指標和陣列的大小,該指標陣列必須申明為void型別,如下 void myarrayofmsg size...
uC OS II 最簡單的訊息佇列
define messages max size 1000 訊息佇列緩衝區的大小 void msggrp messages max size 訊息陣列,訊息陣列存放著各訊息的指標 os event strqueue 訊息佇列 int8u datatemp 需要傳送的範例資料 void comosqc...