C OSIII 任務通訊(訊息傳遞)

2021-06-26 08:28:16 字數 1679 閱讀 3671



使用情況

乙個任務或者中斷服務程式與另乙個任務交流資訊

使用方法

訊息佇列服務函式的實現**在os_q.c檔案中,在編譯時,將os_cfg.h檔案中的配置常數os_cfg_q_en設為1就可啟用這些服務函式。

常用訊息佇列的服務函式有:

void  osqcreate (os_q        *p_q,                    指向訊息佇列控制塊的指標

cpu_char    *p_name,           指向字串的指標——訊息佇列的名字

os_msg_qty   max_qty,        指定訊息佇列的最大長度(必須為非零)

os_err      *p_err)                該函式返回的錯誤碼

void  *osqpend (os_q         *p_q,                    指向訊息佇列控制塊的指標

os_tick       timeout,              指定等待訊息的超時時間(時鐘節拍數)

os_opt        opt,                    

os_msg_size  *p_msg_size,   接受的訊息的大小(位元組數,可用sizeof獲取)

cpu_ts       *p_ts,                   指向乙個時間戳的指標

os_err       *p_err)                 該函式返回的錯誤碼

opt  os_opt_pend_blocking  阻塞模式(任務掛起等待該物件)

os_opt_pend_non_blocking  非阻塞模式(沒有任何訊息存在時,任務直接返回)

void  osqpost (os_q         *p_q,                        指向訊息佇列控制塊的指標  

void         *p_void,                      實際傳送的訊息內容

os_msg_size   msg_size,           設定訊息的大小(位元組數)

os_opt        opt,                  

os_err       *p_err)                    該函式返回的錯誤碼

opt  os_opt_post_fifo   待傳送的訊息儲存在訊息佇列的末尾(fifo)

os_opt_post_lifo   待傳送的訊息儲存在訊息佇列的開頭(lifo)

+os_opt_post_all  向所有等待該訊息佇列的任務傳送訊息(否則只傳送到最高端)

+os_opt_post_no_sched 禁止在本函式內執行任務排程操作

使用例項

static os_q my_q;

void *block1 = "task1 is comunicating with task2";

void *block2;

int main (void)}}

實驗結果

C OSIII 任務同步和通訊(一)

使用情況 任務間通常涉及傳送和接收,但是傳送速度和接收速度要匹配,不然就出問題了,為了解決這個問題在通訊的同時加上流量控制 同步 使用方法 用乙個訊號量和訊息佇列,模型如下 通訊傳送 等待接收完成訊號 傳送訊息 通訊接收 等待傳送訊息 傳送接收完成訊號 使用例項static os q my q st...

C OS III 任務就緒表

在系統中,所有已經就緒等待執行的任務都被放入乙個所謂 就緒表 ready list 中,該錶包括兩部分 1.1 就緒優先順序位對映表 每一位代表乙個優先順序,當某一優先順序由任務就緒時,在就緒優先順序位對映表中該優先順序對應的位被置1,之所以按照上圖的順序對映,是為了便於使用一條特殊的指令 計算前導...

C OS III 任務掛起錶

當乙個任務等待訊號量 互斥型訊號量 時間標誌組或訊息佇列時,該任務就被放入任務掛起錶或等待表中,帶有任務掛起錶的核心物件如下 核心物件 訊號量 互斥訊號量 os sem os mutex 訊號量 事件標誌組 os sem os grp 訊息佇列 os q 每種核心物件的頭部都包含三個相同的資料域,第...