ucos iii 訊息佇列

2021-09-23 01:59:35 字數 2707 閱讀 3840

建立乙個訊息佇列

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...