1. 程式人生 > >uC/OS的訊息郵箱使用經驗

uC/OS的訊息郵箱使用經驗

uC/OS下任務之間通訊的方式之一有訊息郵箱,使用訊息郵箱有兩種方式:

(1)資料的存放

(2)傳遞指向一個數據的指標,就是傳遞多個數據。

 經驗小結如下:

一、資料存放,存放單個數據

郵箱可以傳遞任何型別資料,在傳遞時,先將資料用(void*)進行型別變化,變為void*這種萬用型別,而在接收郵箱資料時,再還原為本身的資料型別,舉例如下:

OSMboxPost(Mbox,(void*)key_value);

其中key_value是一個字元型變數,該變數的型別為INT8U,先轉換為(void*),在接收訊息端

key = (INT8U)OSMboxPend(Mbox,0,&err);

其中key為INT8U格式,注意在OSMboxPend前面增加了型別轉換(INT8U)

二、傳遞指標

       傳送:OSMboxPost(Mbox,(void*)SendData);

接收:data_ptr = (INT8U*)OSMboxPend(Mbox,0,&err);

其中SendData為傳遞的資料名稱,data_ptr為接收資料指標。

另外:郵箱中不能存放傳遞0值,因為把一個0值放入郵箱,經過void *型別變化後,變成了void *0,而判斷郵箱中是否有資料正是通過判斷郵箱中指向Message的指標是否為0來判斷,這樣雖然放入了一個0變數,但郵箱中卻無法判斷這個0值,認為郵箱中還是空。

還有就是,在執行一次OSMboxPend後,會將郵箱清空,只有下次有新的資料到郵箱後,才能等到資料,這一點與現實中的郵箱email是類似的,一旦檢視新郵件後,在新郵件序列中,就沒有了該次新郵件提醒了,這一點,在OSMboxPend函式中也有體現:

 OS_ENTER_CRITICAL();
    pmsg = pevent->OSEventPtr;
    if (pmsg != (void *)0) 

{                                     /* See if there is already a message*/
        pevent->OSEventPtr = (void *)0;           /* Clear the mailbox(清除郵箱)*/
        OS_EXIT_CRITICAL();

相關推薦

uC/OS訊息郵箱使用經驗

uC/OS下任務之間通訊的方式之一有訊息郵箱,使用訊息郵箱有兩種方式: (1)資料的存放 (2)傳遞指向一個數據的指標,就是傳遞多個數據。  經驗小結如下: 一、資料存放,存放單個數據 郵箱可以傳遞任

uC/OS-II 學習筆記之:訊息郵箱

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

uC/OS訊息郵箱——uC/OS學習筆記(五)

1.簡介    在多工作業系統中,常常需要在任務與任務之間通過傳遞一個數據(也叫做“訊息”)的方式進行通訊。為了實現這個目的,可以在記憶體中建立一個儲存空間作為該資料的緩衝區。    如果把這個緩衝區叫做訊息緩衝區,那麼在任務間傳遞資料的一個簡單方法就是傳遞訊息緩衝區的指標

uc/os-ii訊息郵箱

訊息郵箱是一種通訊機制,它能使任務或中斷服務向另一個任務傳送一個指標型的變數,這個指標指向一個包含指定“訊息”的資料結構。訊息郵箱傳送的不是訊息本身,而是訊息的地址指標。使用訊息郵箱之前,必須先建立訊息郵箱,並且要指定指標的初始值。一般情況下,這個初始值是NUL

uC/OS-II訊息佇列及操作

使用訊息佇列可在任務之間傳遞多條訊息,訊息佇列由三部分組成:事件控制塊、訊息佇列和訊息。 事件控制元件塊成員OSEventPtr指向一個叫做佇列控制塊(OS_Q)的結構,該結構管理著一個數組MsgTb1[],該陣列中的元素都是指向訊息的指標。一. 訊息佇列的操作 1. 建立

uc/os-ii訊息佇列

使用訊息佇列可以在任務之間傳遞多條訊息。訊息佇列由三個部分組成:事件控制塊、訊息佇列和訊息。 訊息佇列的資料結構如下圖所示。從圖中可以看到,訊息佇列相當於一個共用一個任務等待列表的訊息郵箱陣列,事件控制塊成員OSEventPtr指向了一個叫做佇列控制塊(OS_

uC/OS訊息佇列——uC/OS學習筆記(七)

1.訊息佇列的介紹     使用訊息佇列可在任務之間傳遞多條訊息。訊息佇列相當於訊息郵箱集合,一個郵箱只能在任務間傳遞一條訊息,而訊息佇列則可以傳遞多條訊息。訊息佇列由三部分組成:事件控制塊、訊息佇列和訊息。 2.訊息佇列的操作    a)建立訊息佇列:QSQCreate

uC/OS-II 學習筆記之:訊息佇列

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

UC/OS II 訊息佇列

訊息郵箱只能儲存一條訊息,訊息佇列沒有這一侷限,可以容納多條資訊佇列,按照先進先出(FIFO)的原則傳送和接受訊息。 訊息佇列的實體不是作業系統提供的,而是由使用者任務提供的。作業系統提供的是對其進行管理的程式。 1:訊息佇列的資料結構 訊息佇列的資料結構主要包括訊息佇列、

uC/OS-II 最簡單的訊息佇列

 #define MESSAGES_MAX_SIZE 1000   /*訊息佇列緩衝區的大小*/ void  *MsgGrp[MESSAGES_MAX_SIZE];     /*訊息陣列,訊息陣列存放著各訊息的指標*/  OS_EVENT *StrQueue;     

UC/OS-II學習筆記之訊息佇列使用

對訊息佇列的學習理解有點難,對技術來說,一本好的書一般是原理和例子相結合的,可惜我找到的很少。書上說訊息佇列實際上是多個郵箱組成的陣列,是一個列表。這個陣列其實是個指標陣列,裡面每個指標可以指向不同型別的變數,通過傳遞一個個指標,我們可以做到傳遞指標所指向的一個個變數。(順便複習下,一個郵箱只能傳遞一個指標,

uC/OS-II 學習筆記:訊息佇列

二、訊息佇列的操作函式: (1)建立訊息佇列函式:OS_EVENT OSQCreate(void **start, INT16U size) (2)請求訊息佇列函式:void *OSQPend(OS_EVENT *pEvent, INI16U timeout, INT8U *err) (3)向訊息佇列傳送訊息

uC/OS-II學習筆記 訊息佇列

對訊息佇列的學習理解有點難,對技術來說,一本好的書一般是原理和例子相結合的,可惜我找到的很少。書上說訊息佇列實際上是多個郵箱組成的陣列,是一個列表。這個陣列其實是個指標陣列,裡面每個指標可以指向不同型別的變數,通過傳遞一個個指標,我們可以做到傳遞指標所指向的一個個變數。(順便

FreeRTOS與uc/os

mutex 資源 free stack pyw pip ram 處理 時間 一、freeRTOS比uCOS II優勝的地方:  1。內核ROM和耗費RAM都比uCOS 小,特別是RAM。 這在單片機裏面是稀缺資源,uCOS至少要5K以上, 而freeOS用2~3K也可以跑的

uc/os iii移植到STM32F4---IAR開發環境

iar 開發 移植 問題 函數 中斷 發現 返回 設定 也許是先入為主的原因,時鐘用不慣Keil環境,大多數的教程都是拿keil寫的,嘗試將官方的uc/os iii 移植到IAR環境。 1、首先嘗試從官網上下載的官方移植的代碼,編譯通過,但是執行會報堆棧溢出警告(為何kei

uc/os-iii學習筆記-資源管理(中斷、訊號、訊號量、互斥訊號量)

資源管理 最常用的獨佔共享資源和建立臨界區的方法有以下幾種: 關、開中斷 獨佔共享資源最簡單也是最快捷的方法就是關中斷和開中斷,當訪問共享資源的速度很快,以至於訪問共享資源所花的時間小於中斷的關閉時間時,可以使用關、開中斷方法。但是不推薦此方法

uc/os-ii任務排程的鎖定與解鎖

排程器上鎖函式OSSchedlock()的功能是用於禁止任務排程,使任務保持對CPU的控制權。排程器開鎖函式OSSchedUnlock()的功能是解除對任務排程的禁止。 排程器上鎖和開鎖的實現原理是:對全域性變數鎖定巢狀計數器OSLockNesting進行操作

嵌入式實時作業系統uc/os-ii 原理及應用 讀書筆記

對任務就緒表的操作理解: 將優先級別為prio的任務置為就緒狀態,可使用如下程式碼 OSRdyGrp |= OSMapTbl[prio >>3];//將prio任務所在的組狀態置為1,表示該組有任務就緒。 OSRdyTbl[prio>>3] |= O

uC/OS-II任務排程中判斷最高優先順序

一、任務優先順序的表示    uC/OS-II中,規定最多可以有64個任務。每個任務的優先順序不能相同,因此,優先順序為0~63.數字越小,優先順序越高,那麼0就是最高優先順序,63就是最低優先順序。系統保留了優先順序最高及最低的各4個,因此使用者不能使用這8個優先順序作為自己的任務的優先順序。巨集OS_L

uC/OS-II核心架構解析---uC/OS-II通訊與同步

1. 訊息郵箱Mbox       Mbox用於多工間單一訊息的傳遞,uC/OS-II使用ECB管理Mbox的基本資訊,OSEventPtr指向建立Mbox時指定的記憶體空間。事件的建立由具體的事件管理程式實現。主要包含在C原始檔OS_MBOX.C中。 OS_EVENT