建立乙個訊息佇列
osqcreate()
os_cfg_q_en
os_q commq;
os_err err;
osqcreate(&commq,「comm queue」,10,&err);
刪除乙個訊息佇列
osqdel()
os_cfg_q_en
os_cfg_q_del_en
os_q dispq;
os_err err;
osqdel(&dispq,os_opt_del_always,&err);
清空乙個訊息佇列
osqflush()
os_cfg_q_en
os_cfg_q_flush_en
os_q commq;
os_err err;
os_msg_qty entries;
entries = osqflush(&commq,&err);
等待訊息佇列
osqpend()
os_cfg_q_en
os_q commq;
os_err err;
void *p_msg;
os_msg_size msg_size;
cpu_ts ts;
osqpend(&commq,100,os_opt_pend_blocking,
&msg_size,&ts,&err);
取消等待訊息佇列
osqpendabort()
os_cfg_q_en
os_cfg_q_pend_abort_en
os_q commq;
os_err err;
os_obj_qty nbr_tasks;
nbr_tasks = osqpendabort(&commq,
os_opt_pend_abort_all,&err);
向訊息佇列傳送一條訊息
osqpost()
os_cfg_q_en
os_q commq;
cpu_int08u commrxbuf[100];
os_err err;
osqpost(&commq,&commrxbuf[0],sizeof(commrxbuf),
os_opt_post_opt_fifo + os_opt_post_all + os_opt_post_no_sched,&err);
訊息佇列是ucos 中任務與任務間、中斷與任務間主要的通訊方式,要使用訊息佇列需要滿足下面條件
下面是一則使用訊息佇列的**示例,乙個任務傳送訊息,乙個任務接受訊息並進行列印(**省略了初始化等其他**)
#include "main.h"
os_q msg_q; //宣告訊息佇列
void rr1_task(void *p_arg)
}void rr2_task(void *p_arg)
ostimedly (1, os_opt_time_dly, &err );
}}
向任務傳送一條訊息
ostaskqpost()
os_cfg_task_q_en
os_tcb commrxtasktcb;
cpu_int08u commrxbuf[100];
os_err err;
ostaskqpost(&commrxtasktcb,&commrxbuf[0],
sizeof(commrxbuf),os_opt_post_fifo,&err);
等待訊息
ostaskqpend()
os_cfg_task_q_en
os_err err;
os_msg_size msg_size;
cpu_ts ts;
ostaskqpend(100,os_opt_pend_blocking,
&msg_size,&ts,&err);
取消等待訊息
ostaskqpendabort()
os_cfg_task_q_en
os_cfg_task_q_pend
_abort_en
os_tcb commrxtasktcb;
os_err err;
ostaskqpendabort(&commrxtasktcb,
os_opt_post_none,&err);
清空任務的訊息佇列
ostaskqflush()
os_cfg_task_q_en
ostaskqflush((os_tcb *)0,&err);
led0_task任務中傳送訊息,led1_task接受訊息並將訊息通過串列埠列印
void led0_task(void *p_arg)
}void led1_task(void *p_arg)
ostimedly (1, os_opt_time_dly, &err ); //相對性延時1000個時鐘節拍(1s)
}}
uc os iii學習筆記 訊息傳遞
訊息佇列 如圖所示,訊息通過os msg q結構體組成乙個訊息佇列,其中inptr指標指向下乙個訊息插入的位置,outptr指標指向下乙個將要取出的訊息的位置。在os msg結構是訊息的結構體,其中msgsize顧名思義就是訊息的長度引數,msgts就是訊息的時間戳,而msgptr指標指向的就是資料...
訊息佇列 訊息佇列
輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...
ucos iii學習之掛起佇列
當任務等待訊號量,mutex,事件標誌組,訊息佇列時,該任務會被放入掛起佇列。掛起佇列 類似於就緒佇列,掛起佇列中放的是等待核心物件的任務。任務在掛起佇列中是根據優先順序分類的。掛起佇列是乙個os pend list 型別的資料結構,包含了三部分的內容。nbrentries 掛起佇列中有幾個任務。t...