1. 程式人生 > >一步一步教你使用uCOS-II

一步一步教你使用uCOS-II

訊息郵箱是uC/OS-II中的另一種通訊機制,可以使一個任務或者中斷服務子程式向另一個任務傳送一個指標型的變數。通常該指標指向一個包含了“訊息”的特定資料結構。
各個任務之間把自己的資料封裝完畢後可以以郵箱的形式傳送給其它的任務使用,從而達到任務間通訊的目的。
應用程式可以使用多少個郵箱,其最大數目是由OS_CFG.H檔案中的配置常數OS_MAX_EVENTS設定。
下面以一個例項來向大家講解一下郵箱的使用過程。
具體的郵箱使用過程如下:
第一步:在程式開始先定義一個郵箱,是指標形式的。定義函式如下:
OS_EVENT *MsgBox;
第二步:在主程式中建立郵箱:
MsgBox = OSMboxCreate((void *)0); // 建立郵箱並初始化為空 
第三步:在接受函式中定義接受時需用到的兩個變數,一個為指標形式
INT8U   err;
INT32U *msg;
在其迴圈函式中接受郵箱資訊:
msg = OSMboxPend(MsgBox, 0, &err); // 接收Task1發來的訊息
Messgae = msg[0]; // 接收訊息到指定的變數
第四步:在傳送函式中也需要先定義兩個變數
INT8U err;
volatile  INT32U MsgData = 1000;
也是在其迴圈函式中傳送郵箱資訊:
err = OSMboxPost(MsgBox, (void*)&MsgData); // 向TaskPWM傳送訊息
注意:在使用時一定要注意資料型別的定義,一定要統一起來。
下面分別對油箱相關的函式做一個簡要的描述。
任務或者中斷服務子程式都可以呼叫函式OSMboxPost(),OSMboxPostOpt() ,而只有任務可以呼叫OSMboxDel() OSMboxPend(), OSMboxQuery()。

void *OSMboxAccept (OS_EVENT *pevent)  無等待的從郵箱中得到一則訊息。

OS_EVENT *OSMboxCreate (void *msg)  建立一個郵箱。
msg:用來初始化建立的訊息郵箱,如果該指標不為空,則建立的訊息郵箱將含有訊息。
返回值:指向分配給所建立的訊息郵箱的事件控制塊的指標。如果沒有可用的事件控制塊,則返回空指標。

OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *err)
刪除一個郵箱。當將OS_CFG.H檔案中的OS_MBOX_DEL_EN設為1時,該函式才會被編譯。使用該函式時要注意,多個任務可能試圖操作已經刪除的郵箱。在刪除郵箱之前,必須首先刪除可能操作該郵箱的所有任務。
pevent:指向郵箱的指標。該指標是在郵箱建立時返回給使用者應用程式的指標。
opt:該先項定義郵箱的刪除條件,可以選擇只能在已經沒有任何在等待該郵箱的訊息時,才能刪除郵箱(OS_DEL_NO_PEND);或者不管有沒有任務在等待郵箱的訊息,立即刪除郵箱(OS_DEL_ALWAYS),在這種情況 下,所有等待郵箱訊息的任務都會立即進入就緒態。
err:指向出錯程式碼的指標。返回的出錯程式碼可以是以下幾種情況之一。
OS_NO_ERR 呼叫成功,郵箱已經被刪除。
OS_ERR_DEL_ISR 試圖在中斷服務子程式中刪除郵箱。
OS_ERR_INVALID_OPT 無效的opt引數,使用者沒有將opt定義為上述兩種情況之一。
OS_ERR_EVENT_TYPE pevent不是指向郵箱的指標。
OS_ERR_PEVENT_NULL 已經沒有OS_EVENT資料結構可以使用。
返回值:返回NULL表示郵箱已被刪除;返回pevent表示郵箱沒有刪作。

void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)  等待郵箱中的訊息。
pevent:指向即將接收訊息的訊息郵箱的指標。
timeout:允許一個任務在經過了指定數目的時鐘節拍後還沒有得到需要的訊息時恢復執行。如果該值為0表示任務將持續等待訊息。
err:指向包含錯誤碼的變數的指標。該函式返回的錯誤碼可能為下述幾種情況
OS_NO_ERR 訊息被正確地接收。
OS_TIMEOUT 訊息沒有在指定的等待時間內送到。
OS_ERR_EVENT_TYPE pevent不是指向訊息郵箱的指標。
OS_ERR_PEND_ISR 從中斷呼叫該函式。
OS_ERR_PEVENT_NULL pevent是空指標。
返回值:該函式返回接收的訊息並將*err置為OS_NO_ERR.

INT8U OSMboxPost (OS_EVENT *pevent, void *msg)  向郵箱傳送一則訊息。
pevent:指向即將接收訊息的訊息郵箱的指標。
msg:即將實際傳送給任務的的訊息。訊息是一個以指標表示的苛種資料型別的變數,在不同的程式中訊息的使用也可能不同。不允許傳遞一個空指標,國灰這意味著訊息郵箱為空。
返回值:該函式的返回值為下述之一:
OS_NO_ERR 訊息成功地放到訊息郵箱中。
OS_MBOX_FULL 訊息郵箱已經包含了其他訊息,已滿。
OS_ERR_EVENT_TYPE pevent不是指向訊息郵箱的指標。
OS_ERR_PEVENT_NULL pevent是空指標。
OS_ERR_POST_NULL_PTR 使用者試圖發出空指標。根據規則,在這裡不支援空指標。

INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)  向郵箱傳送一則訊息。該函式可以向等待郵箱的所有任務傳送訊息(廣播)。
pevent:指向即將接收訊息的訊息郵箱的指標。
msg:即將實際傳送給任務的訊息。訊息是一個以指標表示的某種資料型別的變數,在不同的程式中訊息的使用也可能不同。不允許傳遞一個空指標,因為這意味著訊息郵箱為空。
opt:定義訊息只發給等待郵箱訊息的任務中優先順序最高的任務(將opt置為OS_POST_OPT_NONE),或者讓所有等待 郵箱訊息的任務都得到訊息(將opt置為OS_POST_OPT_BROADCAST)。
返回值:
err 指向包含錯誤碼的變數指標,返回的錯誤碼可能為下述幾種之一:
OS_NO_ERR 訊息成功地放到訊息郵箱中。
OS_MBOX_FULL 訊息郵箱已經包含了其他訊息,已滿。
OS_ERR_EVENT_TYPE pevent不是指向訊息郵箱的指標。
OS_ERR_PEVENT_NULL pevent是空指標。
OS_ERR_POST_NULL_PTR 使用者試圖發出空指標。根據規則,在這裡不支援空指標。 

INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *p_mbox_data)  查詢一個郵箱的狀態。
pevent:指向即將接收訊息的訊息郵箱的指標。
pdata:指向OS_MBOX_DATA資料結構的指標,該資料結構包含下述成員。
void *OSMsg; /*訊息郵箱中訊息的複製*/

INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /*訊息郵箱等待佇列的複製*/
INT8U OSEventGrp
返回值:該函式返回值為下述之一:
OS_NO_ERR 呼叫成功
OS_ERR_EVENT_NULL pevent是空指標
OS_ERR_EVENT_TYPE pevent不是指向訊息郵箱的指標

相關推薦

篇文章,學會Git

eba 時有 當前目錄 文件 展示 遠程分支 amend 解釋 很好 在日常工作中,經常會用到Git操作。但是對於新人來講,剛上來對Git很陌生,操作起來也很懵逼。本篇文章主要針對剛開始接觸Git的新人,理解Git的基本原理,掌握常用的一些命令。 一、Git工作流程

記阿里巴巴的次面試,怎樣應對到來的“金三銀四”!

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

使用uCOS-II

訊息郵箱是uC/OS-II中的另一種通訊機制,可以使一個任務或者中斷服務子程式向另一個任務傳送一個指標型的變數。通常該指標指向一個包含了“訊息”的特定資料結構。 各個任務之間把自己的資料封裝完畢後可以以郵箱的形式傳送給其它的任務使用,從而達到任務間通訊的目的。 應用程式可以使用多少個郵箱,其最大數目是由OS

如何重裝筆記本電腦系統?

splay 出錯 經歷 fff 過程 rep 聯想 isp pre 本文標簽: 電腦技巧 重裝筆記本電腦系統 重裝系統 重裝dell聯想宏碁電腦系統 原文地址:http://whosmall.com/?post=461 不知不覺中,已在程序猿這個職業中瘋狂熬過去了3年時間

用Html5/CSS3做Winform,搭建CefSharp開發環境(附JavaScript異步調用C#例子,及全部源代碼)上

轉載 界面設計 右鍵 異步 一個 由於 編寫 scrip 調用 本文為雞毛巾原創,原文地址:http://www.cnblogs.com/jimaojin/p/7077131.html,轉載請註明 CefSharp說白了就是Chromium瀏覽器的嵌入式核心,我們用此開發W

11成為名初級的iOS開發——零基礎

最近發行iPhone8和11月份要出售的iPhone X又掀起了一波iPhone購買熱潮,為什麽蘋果這麽深受大眾的喜愛呢?當然要歸功於強大的iOS系統,不同於Android,iOS並不需要很高的硬件配置就可以發揮很高的效能。這也使得許多開發者們躍躍欲試的想要成為一名iOS的開發者,據美國的一項調查顯示,

如何用Python操作MySQL

orm imp 成功 you cfa host 刪除 blog all 文章來源:http://www.51testing.com/html/84/n-3724984.html 工欲善其事,必先利其器。所以第一步,我們先下載第三方庫。在這裏,我用到的是pymys

SSM整合swagger

api文檔 ces desc ref jackson nconf 容器 cat .cn 一:什麽是swagger? ?swagger是一款非常好用的寫API文檔的框架。其他自行百度 二:ssm整合swagger? 1:在maven的pom文件中引入依賴:(註意版本,否則會導

如何用 phpwind 搭建論壇、搭建phpwind

本文介紹如何使用輕量應用伺服器的phpwind映象搭建一個論壇。 優惠資訊: 學生請點右邊:學生優惠產品-雲翼計劃-超值9.5元即可,需要學生證 阿里雲限時紅包:最高1888元雲產品通用紅包,可疊加官網常規優惠使用,不領白不領!! 輕量伺服器:最實惠最方便最快速的伺服器,從入門級到高配都有

用Django寫自己的blog系統 --建立屬於的部落格-1

專案的文章導航: 一:連線 1:新建blog專案 2:配置 3:新建一個首頁 二: 1.準備環境,在win7 64位下進行開發 軟體 pycharm 這些能夠使你的開發更專注, 2,python3.6 pip django1.11.16 pymysql mysql5.6 3,開始

永久啟用WebStorm2018

工欲善其事必先利其器,我們在開發過程中,編輯器是我們提高開發效率及生產必備的工具,如何發現一個高效好用的編輯器是程式設計師必備的技能之一。 前端開發有眾多編輯器 sublime、vscode、webstrom等等,在這眾多的開發編輯器中 webstorm 無疑是它們

SpringBoot搭建Activiti整合流程設計器(配置)

轉載請註明出處:猿小雷,https://blog.csdn.net/qq_34638225 1、框架搭建 在IDE裡新建SpringBoot專案,在pom.xml裡引入如下依賴 pom.xml <?xml version="1.0" e

實現阿里巴巴的Sophix熱修復(

1.0 整合準備 gradle遠端倉庫依賴, 開啟專案找到app的build.gradle檔案,新增如下配置: 新增maven倉庫地址: repositories { maven { url "http://maven.ali

認識Python閉包

在「python之禪」公眾號中曾經介紹過兩篇關於函式的文章,第一篇是 關於 Python 函式是第一類物件,第二篇是關於 Lambda 函式,今天來說說 Python 閉包。 什麼是閉包?閉包有什麼用?為什麼要用閉包?今天我們就帶著這3個問題來一步一步認識閉包。閉包和函式緊密聯絡在一起,介紹

用 Vue.js + Vuex 製作專門收藏微信公眾號的 app

寫於 2016.06.30 只看不讚,或者只收藏不讚的都是耍流氓,放學別走,我找我哥收拾你們。 專案地址:github.com/jrainlau/we… 下載&執行 git clone [email protected]:jra

從零開始寫C語言連結串列---構建一個連結串列

為什麼要學習連結串列? 連結串列主要有以下幾大特性: 1、解決陣列無法儲存多種資料型別的問題。 2、解決陣列中,元素個數無法改變的限制(C99的變長陣列,C++也有變長陣列可以實現)。 3、陣列移動元素的過程中,要對元素進行大範圍的移動,很耗時間,效率也不高。

Vue雙向繫結原理,實現雙向繫結

當今前端天下以 Angular、React、vue 三足鼎立的局面,你不選擇一個陣營基本上無法立足於前端,甚至是兩個或者三個陣營都要選擇,大勢所趨。 所以我們要時刻保持好奇心,擁抱變化,只有在不斷的變化中你才能利於不敗之地,保守只能等死。 最近在學習 Vue,一直以來對它的雙向繫結只能算了解並不深入,最近幾天

實現安卓mvvm架構,雙向資料繫結

google 2015年9月推出了mvvm架構,實現了在xml上設定雙向資料繫結,類似js。 開發步驟: 1   首先要先在build.gradle內新增 dataBinding { enabled true }   2.  建立一個Model

實現安卓mvvm架構,雙向資料繫結(二)

上文講了普通介面的雙向資料繫結,本文講一下recyclerview的雙向資料繫結,整個工程只要寫一個adapter就夠了,不用像以前一個recyclerview寫一個adapter了,節省了至少80%的程式碼,什麼第三方庫都不需要了。強大的工具! 1.   建立一個通用

如何用Python做詞雲

前言 在大資料時代,你竟然會在網上看到的詞雲,例如這樣的。 Python學習資料或者需要程式碼、視訊加Python學習群:960410445 看到之後你是什麼感覺?想不想自己做一個? 如果你的答案是正確的,那就不要拖延了,現在我們就開始,做一個詞雲分析圖,Python是一個當下