1. 程式人生 > >uCOS-II之郵箱

uCOS-II之郵箱

多工作業系統中,常常需要再任務與任務之間通過傳遞一個數據(注意這裡是1個數據,而不是多個數據)的方式進行通訊,為了達到這個目的,可以在記憶體中建立一個儲存空間作為該資料的緩衝區,如果把這個緩衝區稱為訊息緩衝器,這樣在任務間傳遞資料(訊息)的最簡單的辦法就是傳遞訊息緩衝區的指標,我們把用來傳遞訊息緩衝區指標的資料結構叫做郵箱(訊息郵箱)。

在ucos中,我們通過事件控制塊的OSEventPrt來傳遞訊息緩衝區指標(在訊號量中,不需要該指標),同時使實踐控制塊的成員OSEventType設定為常數OS_EVENT_TYPE_MBOX,則該事件控制塊ECB就叫做訊息郵箱。

與訊息郵箱相關的幾個函式分別為:

1、建立郵箱函式:OS_EVENT *OSMboxCreate(void *msg),函式中的引數msg為訊息的指標,函式的返回值為訊息郵箱的指標。該函式的實現方法是:先判斷是否在中斷中呼叫該函式,如果是則無效返回;定義一個空ECB,型別為訊息郵箱,將OSEventPrt賦初值為某個指標。返回一個指向上述ECBB的指標。

2、向郵箱傳送訊息函式:INT8U  OSMboxPost(OS_EVENT *pevent,void *pmsg),函式實現過程:檢查了事件控制塊是否是一個郵箱後[L6.16(1)],OSMboxPost()函式還要檢查是否有任務在等待該郵箱中的訊息[L6.16(2)]。如果事件控制塊中的OSEventGrp域包含非零值,就暗示著有任務在等待該訊息。這時,呼叫OSEventTaskRdy()將其中的最高優先順序任務從等待列表中刪除[見6.02節,使一個任務進入就緒狀態,OSEventTaskRdy()][L6.16(3)],加入系統的就緒任務列表中,準備執行。然後,呼叫OSSched()函式[L6.16(4)],檢查該任務是否是系統中最高優先順序的就緒任務。如果是,執行任務切換[僅當OSMboxPost()函式是由任務呼叫時],該任務得以執行。如果該任務不是最高優先順序的任務,OSSched()返回,OSMboxPost()的呼叫函式繼續執行。如果沒有任何任務等待該訊息,指向訊息的指標就被儲存到郵箱中[L6.16(6)](假設此時郵箱中的指標不是非NULL的[L6.16(5)])。這樣,下一個呼叫OSMboxPend()函式的任務就可以立刻得到該訊息了。

     注意:在OSMboxPost函式中,有判斷郵箱中是否已經有了訊息,如果已經有訊息,則返OS_ERR_MBOX_FULL,這就代表,ucos中的郵箱一次只能傳送1個指標,即1個數據,這在使用上就有些侷限。

   3、等待一個郵箱中的訊息函式:OSMboxPend(OS_EVENT *pevent,INT32U timeout,INT8U *perr),函式的實現過程:它和OSSemPend()也很相似,因此,在這裡只講述其中的不同之處。OSMboxPend()首先檢查該事件控制塊是由OSMboxCreate()函式建立的[L6.15(1)]。當.OSEventPtr域是一個非NULL的指標時,說明該郵箱中有可用的訊息[L6.15(2)]。這種情況下,OSMboxPend()函式將該域的值複製到區域性變數msg中,然後將.OSEventPtr置為NULL[L6.15(3)]。這正是我們所期望的,也是執行OSMboxPend()函式最快的路徑。如果沒有訊息可用,則等待。

相關推薦

uCOS-II郵箱

多工作業系統中,常常需要再任務與任務之間通過傳遞一個數據(注意這裡是1個數據,而不是多個數據)的方式進行通訊,為了達到這個目的,可以在記憶體中建立一個儲存空間作為該資料的緩衝區,如果把這個緩衝區稱為訊

探索ucos-ii路 一 --核心目錄結構和核心組成

                UCOS-ii2.5.2核心目錄結構和組成  1.uCOS-II Source->source:(與處理器型別無關的程式碼)**************************************************************************

uCOS-II核心任務排程 [轉載]

uCOS-II核心學習之任務排程 實現任務切換,需要呼叫函式OSSched()。 OSSched()程式程式碼如下所示:void OSSched (void) { INT8U y;

uCOS-II任務管理改變任務優先順序 [轉載]

uCOS-II任務管理之改變任務的優先順序 在uCOS-II 裡,任務的優先順序也是是可以修改的。優先順序翻轉問題是可以通過改變任務優先順序解決。 那什麼是優先順序翻轉問題呢? 所謂優先順序翻轉問題(priority inversion)即當一個高優先順序任務通過訊號量機制

uCOS-II核心時鐘節拍 [轉載]

uCOS-II核心之時鐘節拍在uCOS-II裡,時鐘節拍就好比是人的心臟一樣重要。它對於CPU能順利在各任務間切換有著至關重要的作用。 uCOS-II需要使用者提供時鐘源。使用時鐘源有一個特別需要注意的地方:使用者必須在多工系統啟動以後再開啟時鐘節拍器,也就是在呼叫OSSt

uCOS-II中任務優先級的判定和處理方法

www 一行 con blog 方法 cloud 問題 找到 引入 轉載請註明原文出處,http://www.cnblogs.com/flyingcloude/p/6992346.html 在uCOS-II中,最多有64個優先級,把這64個優先級每8個分成一組,總

uCOS-II的學習筆記(共九期)和例子(共六個)

操作 第七篇 wip target 恢復 第一篇 ont load -i 源:uCOS-II的學習筆記(共九期)和例子(共六個) 第一篇 :學習UCOS前的準備工作http://blog.sina.com.cn/s/blog_98ee3a930100w0eu.htm

NIOS2隨筆——uCOS-II實時操作系統

ucos-ii nios2 1. 概述本設計采用NIOS2 32位處理器,實現uCOS-II實時操作系統的使用,實現兩個任務同時運行,一個LED閃爍,一個串口打印。硬件平臺采用ETree的開發板(某寶提供),如下圖所示:2. uCOS-II簡介μC/OS 和μC/OS-II 是專門為計算機的嵌入式應用

uCOS-II

默認 xxx apt its 含義 設計 eof type lse 1. 確定 如果優先級個數小於64,定義 OS_PRIO INT8U,否則默認為256個優先級 定義為INT16U。 #if OS_LOWEST_PRIO <= 63utypedef INT8U

Altera FPGA NIOS-IIHello World

1、什麼是NIOS II? NIOS II就是一款CPU,和51、ARM、MIPS、X86的概念是一樣的。但是與其他處理器架構相比NIOS II最大的特點是執行在(Intel Altera)FPGA上的軟核處理器,說白了就是使用Verilog HDL或者VHDL語言在FPGA內部實現了一

HTML表單郵箱驗證

學習HTML,表單是一個很重要的知識,而表單最常用的可能就是表單的驗證了;下面我介紹驗證郵箱的一種方法: 先上程式碼:(注:這個程式碼是可以執行的,可以自己試試,把重點放在js和表單裡面!) <!DOCTYPE html> <html> <

uCOS-II任務就緒表OSRdyGrp、OSRdyTbl、OSUnMapTbl原理

uCOS版本:V2.91     使用過uCOS的人應該都知道,每一個uCOS的任務都有一個特定的優先順序,就像人的身份證一樣,是唯一的,這個優先順序在建立的時候就有直到這個任務被刪除,整個生命週期都是存在的。優先順序越低,任務的優先順序就越高。 &n

uCOS-II OSTaskCreate函式分析

ucos版本:V2.91 函式名:OSTaskCreate 函式原型位置:os_task.c:206行 首先看形參列表及返回值: 返回值型別為INT8U,用於儲存錯誤標誌。 第一個引數為:void (*task)(void *p_arg),此處為一函式指標,用於指定任務執行的函式。

ucos-ii核心概述

                一.臨界段處理器處理臨界程式碼都必須先關中斷,再處理臨界程式碼,然後再開中斷。關中斷時間對實時系統的實時響應很重要。所以是實時系統的一個很重要的指標。uCOS使用兩個巨集(在OS_CPU.h中定義。注:沒個CPU都有自己的OS_CPU.h)。這兩個巨集分別為OS_ENTER_C

ucos ii學習筆記1——任務中斷和排程

       UCos ii的中斷過程是接收到中斷請求,如果此時處理器處於中斷允許的情況下,系統中止當前執行的任務,而按照中斷向量指向的中斷服務子程式,當中斷服務子程式結束時,系統將根據當前優先順序連結串列中的情況,返回原先的被中止的任務繼續執行,或者到另一個優先順序更高

uCOS-II學習筆記:實時作業系統(一)

1.前後臺系統:前後臺系統的架構用一句話來形容的話,就是一個大的迴圈,加上中斷,就形成了一個整的體系。 假設來了中斷需要處理模組3,如果模組3的處理是最緊迫的,但是當前cpu 只執行到模組1, 這樣的話,必須還要承受模組2的執行時間延遲,才能輪到模組3的處理,當模組越多的

uCOS-II中的任務切換-圖解多種任務排程時機與問題

【@.1 任務排程時機】 之前的一篇文章分析了具體的uCOS-II中的任務切換機制,是從函式呼叫的角度上分析的。這次我具體從整個程式執行的時間上來看,分析多種任務排程發生的時機。以下所有圖片均可點選放大觀察。 所有圖中紅色箭頭表示中斷級的任務切換,藍色箭頭表示任務級的中斷切換。 1.僅有一個任務,這種情況

uCOS-II原始碼下載及原始碼目錄結構

  攻克RTOS之旅,揚帆起航!   RTOS有眾多種,個人感覺,用得最火的是FreeRTOS,因為它即使用於商業途徑,也是開源免費的;其次是就是uCOS-II和uCOS-III。uCOS-II用於商業途徑是需要付費的,但是對於學習研究卻是免費的。它們同是嵌入

UCOS II怎麼查詢當前就緒表中,優先順序最高的任務

uCOS-II為了保證CPU總是執行優先順序最高的任務,每當任務狀態發生變化時,就需要判斷當前任務是否為最高優先順序,不是的話就需要進行上下文切換。如何在需要進行任務優先順序比較時,快速的將就緒態任務中優先順序最高的讀出。一種最簡單的資料結構就是定義一個unsi

uCOS III 和 uCOS II的區別

邵貝貝:嵌入式作業系統μC/OS-III 作者:邵貝貝 來源:嵌入式系統聯誼會        邵老師長期從事微控制器和嵌入式系統教學和應用工作,並負責清華大學飛思卡爾實驗室工作。邵老師與大家分享了μC/OS的發展經歷,即將釋出的μC/OS-III的細節,以及他對未來嵌入式作業系統的認識。 以下是文字實錄。