在uC/OS-II中郵箱是線程(任務)通訊的一種,使用郵箱能夠發(fā)送一個指針,當然也可以發(fā)送指針大小的數(shù)據(jù)。
大致原理是,如果郵箱中沒有郵件(數(shù)據(jù)),此時線程嘗試獲取,會導致線程進入掛起狀態(tài)。當郵箱中有郵件時,恢復最高優(yōu)先級線程。
經(jīng)常使用的幾個函數(shù),如下:
1、OSMboxCreate()
創(chuàng)建一個郵箱,并進行初始化
2、OSMboxPend()
嘗試從郵箱獲取郵件,如果郵箱中有郵件則立即獲得,退出此函數(shù)。如果郵箱為空,調用線程進入掛起狀態(tài),等待郵件到來。
在uC/OS-II中多個線程等待郵件時,不是采用鏈表的方式,采用鏈表就有優(yōu)先級排序問題,排序時間和鏈表長度有關,時間不可控,實時性差一些。uC/OS-II采用了一種巧妙的方式,以后專門寫個文章敘述一下。
此函數(shù)不能在ISR中調用。
3、OSMboxPost()
嘗試發(fā)送郵件:
1)如果有線程正在等待郵件,則把郵件發(fā)送給優(yōu)先級最高的線程。在uC/OS-II中無論等待的線程有多少個,從這些線程中挑選出最高優(yōu)先級的時間是一樣的,這一點非常重要,也是實時操作系統(tǒng)的特點,時間可控。
2)如果沒有線程等待郵件,看一下郵箱是否已滿,滿則返回錯誤碼,空則把郵件放入郵箱。
4、OSMboxAccept
嘗試獲取郵件,如果郵箱里有郵件,直接取出來,如果沒有返回(void *)0郵件,不會掛起線程。
5、OSMboxPendAbort
取消掛起的線程,被恢復的線程獲得(void *)0郵件,這個函數(shù)有兩個選項,一個是只恢復最高優(yōu)先級線程,另外一個是恢復所有正在等待的線程。
6、OSMboxPostOpt
這個函數(shù)比OSMboxPost()多了幾個選項:
NONE:和OSMboxPost()完全一樣。
BROADCAST:等待的線程全部獲得相同郵件。
NO_SCHED:恢復最高優(yōu)先級的線程,但是不進行線程調度
7、OSMboxDel
刪除郵箱,刪除時有兩個選項:
NO_PEND:只有沒有線程掛起等待時才能刪除郵箱
ALWAYS:直接刪除,如果有線程等待,恢復等待線程,線程獲得(void *)0郵件。
8、OSMboxQuery
查詢郵箱,結果放在OS_MBOX_DATA結構體中。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
相關推薦
uc os-ii的官方網(wǎng)站是:uc os-ii官方網(wǎng)站http://www.micrium.com/
發(fā)表于 06-26 13:36
信號量,郵箱,消息隊列,內存管理,中斷管理等。任務管理uC/OS-II 中最多可以支持64 個任務,分別對應優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務和4個最低
發(fā)表于 10-08 09:11
信號量,郵箱,消息隊列,內存管理,中斷管理等。任務管理uC/OS-II 中最多可以支持64 個任務,分別對應優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務和4個最低
發(fā)表于 10-11 09:26
信號量,郵箱,消息隊列,內存管理,中斷管理等。任務管理uC/OS-II 中最多可以支持64 個任務,分別對應優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務和4個最低
發(fā)表于 10-15 11:03
信號量,郵箱,消息隊列,內存管理,中斷管理等。任務管理uC/OS-II 中最多可以支持64 個任務,分別對應優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務和4個最低
發(fā)表于 10-20 09:35
信號量,郵箱,消息隊列,內存管理,中斷管理等。任務管理uC/OS-II 中最多可以支持64 個任務,分別對應優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務和4個最低
發(fā)表于 10-25 09:59
信號量,郵箱,消息隊列,內存管理,中斷管理等。任務管理uC/OS-II 中最多可以支持64 個任務,分別對應優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務和4個最低
發(fā)表于 10-27 09:29
uC/OS-II的運行機制是什么?uC/OS-II中的優(yōu)先級翻轉問題有哪些?如何去解決uC/OS-II
發(fā)表于 04-25 07:07
,如下圖所示。uC/OS-II內核結構2、對各部分的進一步解釋:第一部分 (1):與硬件無關的高層的操作系統(tǒng)部分大部分是關于任務的創(chuàng)建、信號量的創(chuàng)建、郵箱和隊列的創(chuàng)建,以...
發(fā)表于 08-05 08:09
怎么去移植uC/OS-II系統(tǒng)呢?移植uC/OS-II系統(tǒng)的過程是怎樣的?
發(fā)表于 11-01 07:38
請大家先想一下,為什么想學uc/OS-II?在通過例程學習單片機的時候有沒有這樣的疑問,為什么例程是一個個孤立的呢,能否整合在一起?RTOS就是這樣一個多線程運行的好工具,我選取UCOS來實現(xiàn)
發(fā)表于 02-18 07:16
The uC/OS-II port for Keil C V6.20, V6.21 or higher
發(fā)表于 03-25 14:18
?57次下載
目前,uc/os-ii 在嵌入式系統(tǒng)中得到了廣泛的應用,但適用于uc/os-ii 的圖形界面卻很少。本文介紹了一種適用于
發(fā)表于 08-24 08:17
?21次下載
應用uC/OS-II,自然要為它開發(fā)應用程序,下面論述基于uC/OS-II的應用程序的基本結構以及注意事項。 每一個uC/
發(fā)表于 10-24 11:28
?2次下載
,如下圖所示。uC/OS-II內核結構2、對各部分的進一步解釋:第一部分 (1):與硬件無關的高層的操作系統(tǒng)部分大部分是關于任務的創(chuàng)建、信號量的創(chuàng)建、郵箱和隊列的創(chuàng)建,以...
發(fā)表于 12-23 19:58
?5次下載
評論