使用情況
乙個任務或者中斷服務程式與另乙個任務交流資訊
使用方法
訊息佇列服務函式的實現**在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 每種核心物件的頭部都包含三個相同的資料域,第...