1. 程式人生 > >uC/OS-II 學習筆記之:訊息佇列

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

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

更多原創“uC/OS-II學習筆記之:系列”基礎及嵌入式相關知識詳解,請訪問可樂虎部落格:

相信不會讓您失望!!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

一、訊息佇列的概念:
    前面學習了訊息郵箱,可能我們會發現,訊息郵箱只能存放一條訊息。那麼如何存放多條訊息呢?uC/OS為了實現這一目的,使用了訊息佇列。訊息佇列由(1)事件控制塊、(2)佇列控制塊、(3)訊息三部分組成。

    當把事件控制塊成員OSEventType的值置為OS_EVENT_TYPE_Q時,該事件控制塊描述的就是一個訊息佇列。

(1)事件控制塊:
typedef struct
{
    INT8U  OSEventType;//事件的型別
    INT16U OSEventCnt;//訊號量計數器
    void   *OSEventPtr;//訊息或訊息佇列的指標
    INT8U  OSEventGrp;//等待事件的任務組
    INT8U  OSEventTbl[OS_EVENT_TBL_SIZE];//任務等代表
} OS_EVENT;

(2)佇列控制塊:
typedef struct os_q
{
    struct os_q *OSQPtr;
    void **OSQStart;
    void **OSQEnd;
    void **OSQIn;
    void **OSQOut;
    void **OSQSize;
    void **OSQEntries;
} OS_Q;

(3)訊息:
void *MsgTbl[];

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

參:   任哲 《嵌入式實時作業系統uC/OS-II原理及應用》
參:   盧有亮 《嵌入式實時作業系統uC/OS原理與實踐》

相關推薦

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

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

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

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

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學習筆記 訊息佇列

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

uC/OS-II學習筆記(1)

by WC 7.9.2015 本文假設讀者對uC/OS-II和多工知之甚少,但有一定的C語言和微控制

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

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

React-Native學習筆記導航器Navigator實現頁面間跳轉

Navigator用來實現不同頁面的切換,想設定Navigator,必須確定一個或多個呼叫routes物件,去定義每個場景。 還可以利用renderScene方法,導航欄可以根據指定的路由來渲染場景。

Python 學習筆記正則表示式

一、正則表示式的概念 1.使用單個字串來描述匹配一系列符合某個句法規則的字串; 2.是對字串操作的一種邏輯公式; 3.其應用場景為處理文字和資料; 4.正則表示式的執行過程:依次拿出表示式和文字中的字串比較,如果每個字元都能匹配成功,則匹配成功;否則匹配失敗。 二、re模

Android學習筆記NDK開發環境配置

   NDK 即Native Development Kit,因此又被Google稱為“NDK”。 1,提高程式的效能:把需要高效能的應用邏輯使用C開發, 2,程式程式碼進行保護:因為反編譯C/C++

uc/os-iii學習筆記-任務排程

可剝奪含義: ucos-iii採用的是“可剝奪型”,意味著當一個事件發生,並且使得一個更高優先順序任務就緒時,ucos就會立即將CPU的控制權剝奪,轉交給更高優先順序的任務使用。當一個任務將訊號量釋放給一個更高優先順序的任務,當前任務就會掛起,而更高優先順序的

uC/OS-II任務排程就緒表及最高優先順序任務判定演算法

uC/OS-II是Jean J. Labrosse設計的完整的、可移植、可固化、可裁剪的搶佔式實時多工核心,絕大部分程式碼都是用標準的C語言編寫的,開源、規模不大,比較適合初次接觸嵌入式作業系統的人員

uC/OS II 函式說明 –OS_TCBInit()

TCB初始化函式,被OSTaskCreate()與OSTaskCreateExt()呼叫,需要注意的是,這個函式是對內的,即此函式可以被uC/OS II呼叫,使用者應用程式不可以直接呼叫此函式。OSTcbInit()函式的引數是與OSTaskCreateExt()的引數對應的

uc/os-iii學習筆記---儲存管理(記憶體管理)

記憶體管理 我本人覺得記憶體管理反而是最容易的管理函式。 作為一個RTOS作業系統,記憶體管理是必備的功能,因此UCOSIII也就記憶體管理能力。通常應用程式可以呼叫ANSI C編譯器的malloc()和free()函式來動態的分配和釋放記憶體,但是在嵌

uC/OS II 函式說明 –OSTaskCreate()與OSTaskCreateExt()

#if OS_ARG_CHK_EN > 0    if (prio > OS_LOWEST_PRIO) {             /* 引數檢查,優先順序是否處於允許優先順序之內     */        return (OS_PRIO_INVALID);    }#endif    OS_E

uc/OS-II讀書筆記

第五章小結   嵌入式系統中的各個任務是為同一個大的任務服務的子任務,它們不可避免地要共同使用一些共享資源,並且在處理一些需要多個任務共同協作來完成的工作時,還需要相互的支援和限制,因此,對於一個完善的多工作業系統來說,系統必須具有完備的同步和通訊機制。   在各任務之間必

uC/OS II 函式說明與訊號量操作相關的六個函式

    if (OSIntNesting > 0) {                           /* ISR中,不允許此操作                           */        *err = OS_ERR_PEND_ISR;                        

Netty學習筆記Http編碼和解碼

private final boolean client;/*** @param client*/public HttpPipelindeInitializer(boolean client) {this.client = client;}@Overrideprotected

經典uC/OS-II系統的學習教程(三)

核心結構 本章給出μC/OS-Ⅱ的主要結構概貌。讀者將學習以下一些內容;μC/OS-Ⅱ是怎樣處理臨界段程式碼的;什麼是任務,怎樣把使用者的任務交給μC/OS-Ⅱ;任務是怎樣排程的;應用程式CPU的利用率是多少,μC/OS-Ⅱ是怎樣知道的;怎樣寫中斷服務子程式;什麼是時鐘節拍,

Redis學習筆記Redis用作訊息佇列

package org.yamikaze.redis.messsage.subscribe; import org.yamikaze.redis.test.MyJedisFactory; import redis.clients.jedis.Jedis; import redis.clients.jedis