0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

uC/OS-II—郵箱介紹

冬至子 ? 來源:硬件工程師技術(shù)干貨 ? 作者:硬件工程師技術(shù)干 ? 2023-09-11 15:35 ? 次閱讀

在uC/OS-II中郵箱是線程(任務(wù))通訊的一種,使用郵箱能夠發(fā)送一個(gè)指針,當(dāng)然也可以發(fā)送指針大小的數(shù)據(jù)。

大致原理是,如果郵箱中沒有郵件(數(shù)據(jù)),此時(shí)線程嘗試獲取,會(huì)導(dǎo)致線程進(jìn)入掛起狀態(tài)。當(dāng)郵箱中有郵件時(shí),恢復(fù)最高優(yōu)先級(jí)線程。

經(jīng)常使用的幾個(gè)函數(shù),如下:

1、OSMboxCreate()

創(chuàng)建一個(gè)郵箱,并進(jìn)行初始化

2、OSMboxPend()

嘗試從郵箱獲取郵件,如果郵箱中有郵件則立即獲得,退出此函數(shù)。如果郵箱為空,調(diào)用線程進(jìn)入掛起狀態(tài),等待郵件到來。

在uC/OS-II中多個(gè)線程等待郵件時(shí),不是采用鏈表的方式,采用鏈表就有優(yōu)先級(jí)排序問題,排序時(shí)間和鏈表長度有關(guān),時(shí)間不可控,實(shí)時(shí)性差一些。uC/OS-II采用了一種巧妙的方式,以后專門寫個(gè)文章敘述一下。

此函數(shù)不能在ISR中調(diào)用。

3、OSMboxPost()

嘗試發(fā)送郵件:

1)如果有線程正在等待郵件,則把郵件發(fā)送給優(yōu)先級(jí)最高的線程。在uC/OS-II中無論等待的線程有多少個(gè),從這些線程中挑選出最高優(yōu)先級(jí)的時(shí)間是一樣的,這一點(diǎn)非常重要,也是實(shí)時(shí)操作系統(tǒng)的特點(diǎn),時(shí)間可控。

2)如果沒有線程等待郵件,看一下郵箱是否已滿,滿則返回錯(cuò)誤碼,空則把郵件放入郵箱。

4、OSMboxAccept

嘗試獲取郵件,如果郵箱里有郵件,直接取出來,如果沒有返回(void *)0郵件,不會(huì)掛起線程。

5、OSMboxPendAbort

取消掛起的線程,被恢復(fù)的線程獲得(void *)0郵件,這個(gè)函數(shù)有兩個(gè)選項(xiàng),一個(gè)是只恢復(fù)最高優(yōu)先級(jí)線程,另外一個(gè)是恢復(fù)所有正在等待的線程。

6、OSMboxPostOpt

這個(gè)函數(shù)比OSMboxPost()多了幾個(gè)選項(xiàng):

NONE:和OSMboxPost()完全一樣。

BROADCAST:等待的線程全部獲得相同郵件。

NO_SCHED:恢復(fù)最高優(yōu)先級(jí)的線程,但是不進(jìn)行線程調(diào)度

7、OSMboxDel

刪除郵箱,刪除時(shí)有兩個(gè)選項(xiàng):

NO_PEND:只有沒有線程掛起等待時(shí)才能刪除郵箱

ALWAYS:直接刪除,如果有線程等待,恢復(fù)等待線程,線程獲得(void *)0郵件。

8、OSMboxQuery

查詢郵箱,結(jié)果放在OS_MBOX_DATA結(jié)構(gòu)體中。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 單線程
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    1764
  • ucos-ii
    +關(guān)注

    關(guān)注

    1

    文章

    11

    瀏覽量

    3575
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    uc os-ii官方網(wǎng)站

    uc os-ii的官方網(wǎng)站是:uc os-ii官方網(wǎng)站http://www.micrium.com/
    發(fā)表于 06-26 13:36

    uC/OS-II簡介

    信號(hào)量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對(duì)應(yīng)優(yōu)先級(jí)0~63,其中0 為最高優(yōu)先級(jí)。63為最低級(jí),系統(tǒng)保留了4個(gè)最高優(yōu)先級(jí)的任務(wù)和4個(gè)最低
    發(fā)表于 10-08 09:11

    uC/OS-II簡介

    信號(hào)量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對(duì)應(yīng)優(yōu)先級(jí)0~63,其中0 為最高優(yōu)先級(jí)。63為最低級(jí),系統(tǒng)保留了4個(gè)最高優(yōu)先級(jí)的任務(wù)和4個(gè)最低
    發(fā)表于 10-11 09:26

    uC/OS-II簡介

    信號(hào)量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對(duì)應(yīng)優(yōu)先級(jí)0~63,其中0 為最高優(yōu)先級(jí)。63為最低級(jí),系統(tǒng)保留了4個(gè)最高優(yōu)先級(jí)的任務(wù)和4個(gè)最低
    發(fā)表于 10-15 11:03

    uC/OS-II簡介

    信號(hào)量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對(duì)應(yīng)優(yōu)先級(jí)0~63,其中0 為最高優(yōu)先級(jí)。63為最低級(jí),系統(tǒng)保留了4個(gè)最高優(yōu)先級(jí)的任務(wù)和4個(gè)最低
    發(fā)表于 10-20 09:35

    uC/OS-II簡介

    信號(hào)量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對(duì)應(yīng)優(yōu)先級(jí)0~63,其中0 為最高優(yōu)先級(jí)。63為最低級(jí),系統(tǒng)保留了4個(gè)最高優(yōu)先級(jí)的任務(wù)和4個(gè)最低
    發(fā)表于 10-25 09:59

    uC/OS-II簡介

    信號(hào)量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對(duì)應(yīng)優(yōu)先級(jí)0~63,其中0 為最高優(yōu)先級(jí)。63為最低級(jí),系統(tǒng)保留了4個(gè)最高優(yōu)先級(jí)的任務(wù)和4個(gè)最低
    發(fā)表于 10-27 09:29

    如何去解決uC/OS-II中優(yōu)先級(jí)翻轉(zhuǎn)問題?

    uC/OS-II的運(yùn)行機(jī)制是什么?uC/OS-II中的優(yōu)先級(jí)翻轉(zhuǎn)問題有哪些?如何去解決uC/OS-II
    發(fā)表于 04-25 07:07

    uC/OS-II源碼包的下載

    ,如下圖所示。uC/OS-II內(nèi)核結(jié)構(gòu)2、對(duì)各部分的進(jìn)一步解釋:第一部分 (1):與硬件無關(guān)的高層的操作系統(tǒng)部分大部分是關(guān)于任務(wù)的創(chuàng)建、信號(hào)量的創(chuàng)建、郵箱和隊(duì)列的創(chuàng)建,以...
    發(fā)表于 08-05 08:09

    uC/OS-II移植過程記錄

    怎么去移植uC/OS-II系統(tǒng)呢?移植uC/OS-II系統(tǒng)的過程是怎樣的?
    發(fā)表于 11-01 07:38

    為什么想學(xué)uc/OS-II

    請大家先想一下,為什么想學(xué)uc/OS-II?在通過例程學(xué)習(xí)單片機(jī)的時(shí)候有沒有這樣的疑問,為什么例程是一個(gè)個(gè)孤立的呢,能否整合在一起?RTOS就是這樣一個(gè)多線程運(yùn)行的好工具,我選取UCOS來實(shí)現(xiàn)
    發(fā)表于 02-18 07:16

    The uC/OS-II port for Keil C V

    The uC/OS-II port for Keil C V6.20, V6.21 or higher
    發(fā)表于 03-25 14:18 ?57次下載

    基于uc/os-ii 的嵌入式GUI研究與應(yīng)用

    目前,uc/os-ii 在嵌入式系統(tǒng)中得到了廣泛的應(yīng)用,但適用于uc/os-ii 的圖形界面卻很少。本文介紹了一種適用于
    發(fā)表于 08-24 08:17 ?21次下載

    uC/OS-II 應(yīng)用程序基本結(jié)構(gòu)及重要的API介紹

    應(yīng)用uC/OS-II,自然要為它開發(fā)應(yīng)用程序,下面論述基于uC/OS-II的應(yīng)用程序的基本結(jié)構(gòu)以及注意事項(xiàng)。 每一個(gè)uC/
    發(fā)表于 10-24 11:28 ?2次下載

    【嵌入式系統(tǒng)—實(shí)時(shí)操作系統(tǒng)】uC/OS-II 及其STM32F103移植

    ,如下圖所示。uC/OS-II內(nèi)核結(jié)構(gòu)2、對(duì)各部分的進(jìn)一步解釋:第一部分 (1):與硬件無關(guān)的高層的操作系統(tǒng)部分大部分是關(guān)于任務(wù)的創(chuàng)建、信號(hào)量的創(chuàng)建、郵箱和隊(duì)列的創(chuàng)建,以...
    發(fā)表于 12-23 19:58 ?5次下載
    【嵌入式系統(tǒng)—實(shí)時(shí)操作系統(tǒng)】<b class='flag-5'>uC</b>/<b class='flag-5'>OS-II</b> 及其STM32F103移植