uc/os-iii學習筆記-訊息傳遞

JosephGodVim發表於2016-07-20

訊息


  • 一則訊息包含幾個部分:指向資料的指標、表明資料長度的變數、記錄訊息釋出時刻的時間戳。
  • 指標指向的可以是一塊資料區或者一個函式。
  • 訊息的內容必須一直保持可見性,即訊息的便令必須在接收訊息的任務程式碼範圍內有效。

訊息佇列


這裡寫圖片描述
如圖所示,訊息通過OS_MSG_Q結構體組成一個訊息佇列,其中InPtr指標指向下一個訊息插入的位置,OutPtr指標指向下一個將要取出的訊息的位置。
在OS_MSG結構是訊息的結構體,其中MsgSize顧名思義就是訊息的長度引數,MsgTS就是訊息的時間戳,而MsgPtr指標指向的就是資料區或者函式。
整體資料結構關係如下圖所示:
這裡寫圖片描述

任務自己也有一個內建的訊息佇列,通過內建訊息佇列可以更加簡單快速的進行訊息的操作。
同任務內嵌訊號量一樣,UCOSIII的每個任務中也有內建訊息佇列。而且多個任務等待同一個訊息佇列的應用很少見,UCOSIII中每個任務多有其內建訊息佇列的話使用者可以不用通過外部的訊息佇列而直接向任務釋出訊息。
如果需要使用任務內建訊息佇列功能的時候需要將巨集OS_CFG_TASK_Q_EN置1來使能相關的程式碼。


訊息的相關函式如下圖所示:


下圖是訊息佇列:

這裡寫圖片描述

舉個例子:
OSQCreate ((OS_Q*       )&KEY_Msg,//訊息佇列
           (CPU_CHAR*   )"KEY Msg",//訊息佇列名稱
           (OS_MSG_QTY  )KEYMSG_Q_NUM,//訊息佇列長度
           (OS_ERR* )&err); //返回錯誤資訊
           其他的函式差不多同理,可以自行檢視原始碼,離開原始碼是無法知曉具體流程的!!!!!

下圖是內建訊息佇列:

這裡寫圖片描述


相關文章