1、uC/OS-II隊(duì)列原理
消息隊(duì)列是線程間通訊的一種,主要用作數(shù)據(jù)緩沖,用途非常廣泛。一般情況下遵循先進(jìn)先出原則。先來看隊(duì)列結(jié)構(gòu)體:
uC/OS-II使用一個(gè)指針數(shù)組實(shí)現(xiàn)了消息隊(duì)列,數(shù)組中每個(gè)元素可以存放一個(gè)指針。當(dāng)然如果不傳輸指針傳輸普通數(shù)據(jù)也是可以的。
這個(gè)指針數(shù)組經(jīng)過函數(shù)OSQCreate()處理后變成如下這個(gè)樣子。OSQIn、OSQOut都指向起始位置。
這其實(shí)是一個(gè)環(huán)形隊(duì)列結(jié)構(gòu),現(xiàn)在把上面的圖形掰彎,如下:
工作原理大致是:
當(dāng)OSQPost()函數(shù)向隊(duì)列中放數(shù)據(jù)后,OSQIn移動(dòng)一個(gè)位置。如果OSQIn指針已經(jīng)旋轉(zhuǎn)到末尾,則重新指向起始位置。OSQIn指向數(shù)據(jù)即將要插入的位置,換句話說它指的地方是“空的”。
OSQPend()函數(shù)從隊(duì)列中取出數(shù)據(jù)后OSQOut移動(dòng)一個(gè)位置。如果OSQOut指針已經(jīng)旋轉(zhuǎn)到末尾,則重新指向起始位置。OSQOut指向最“舊”的數(shù)據(jù), 換句話說它指的地方是“滿的”。
數(shù)據(jù)取放示意圖如下:
2、隊(duì)列相關(guān)函數(shù)介紹
OSQCreate()
初始化事件結(jié)構(gòu)體,根據(jù)參數(shù)提供的內(nèi)存起始地址以及大小,把這一塊內(nèi)存初始化為環(huán)形隊(duì)列。
OSQPost()
此函數(shù)嘗試存入數(shù)據(jù),如果有線程正在等待數(shù)據(jù),則選取最高優(yōu)先級的線程,并把它恢復(fù)為運(yùn)行態(tài)。數(shù)據(jù)直接給了等待線程,沒有進(jìn)入環(huán)形隊(duì)列。
如果沒有線程等待,此函數(shù)把數(shù)據(jù)放入隊(duì)列,放入后OSQIn移動(dòng)一個(gè)位置,如果OSQIn已經(jīng)到了OSQEnd位置,重新設(shè)置為OSQStart。
如果隊(duì)列已經(jīng)滿了,再次調(diào)用此函數(shù),直接返回錯(cuò)誤碼,不會(huì)覆蓋隊(duì)列中的數(shù)據(jù)。
OSQPend()
此函數(shù)嘗試從隊(duì)列取出數(shù)據(jù),如果隊(duì)列中有數(shù)據(jù),那么把最舊的數(shù)據(jù)取出來。交給線程即可。如果隊(duì)列是空隊(duì)列,則掛起當(dāng)前線程,直至其它線程向隊(duì)列發(fā)送數(shù)據(jù)或者線程等待超時(shí)。
OSQAccept()
隊(duì)列中有數(shù)據(jù)取出來,沒有數(shù)據(jù)也不會(huì)掛起線程??捎糜诓樵?。
OSQFlush()
清空隊(duì)列
OSQPostFront()
反向放數(shù)據(jù),把數(shù)據(jù)放到隊(duì)列尾部。
OSQQuery()
隊(duì)列信息查詢,信息放到結(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)推薦
信號量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個(gè)最高優(yōu)先級的任務(wù)和4個(gè)最低
發(fā)表于 10-08 09:11
信號量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個(gè)最高優(yōu)先級的任務(wù)和4個(gè)最低
發(fā)表于 10-11 09:26
信號量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個(gè)最高優(yōu)先級的任務(wù)和4個(gè)最低
發(fā)表于 10-15 11:03
信號量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個(gè)最高優(yōu)先級的任務(wù)和4個(gè)最低
發(fā)表于 10-20 09:35
信號量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個(gè)最高優(yōu)先級的任務(wù)和4個(gè)最低
發(fā)表于 10-25 09:59
信號量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。任務(wù)管理uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個(gè)最高優(yōu)先級的任務(wù)和4個(gè)最低
發(fā)表于 10-27 09:29
uC/OS-II的運(yùn)行機(jī)制是什么?uC/OS-II中的優(yōu)先級翻轉(zhuǎn)問題有哪些?如何去解決uC/OS-II
發(fā)表于 04-25 07:07
,如下圖所示。uC/OS-II內(nèi)核結(jié)構(gòu)2、對各部分的進(jìn)一步解釋:第一部分 (1):與硬件無關(guān)的高層的操作系統(tǒng)部分大部分是關(guān)于任務(wù)的創(chuàng)建、信號量的創(chuàng)建、郵箱和隊(duì)列的創(chuàng)建,以...
發(fā)表于 08-05 08:09
怎么去移植uC/OS-II系統(tǒng)呢?移植uC/OS-II系統(tǒng)的過程是怎樣的?
發(fā)表于 11-01 07:38
請大家先想一下,為什么想學(xué)uc/OS-II?在通過例程學(xué)習(xí)單片機(jī)的時(shí)候有沒有這樣的疑問,為什么例程是一個(gè)個(gè)孤立的呢,能否整合在一起?RTOS就是這樣一個(gè)多線程運(yùn)行的好工具,我選取UCOS來實(shí)現(xiàn)
發(fā)表于 02-18 07:16
目前,uc/os-ii 在嵌入式系統(tǒng)中得到了廣泛的應(yīng)用,但適用于uc/os-ii 的圖形界面卻很少。本文介紹了一種適用于
發(fā)表于 08-24 08:17
?21次下載
應(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次下載
uC/OS-II目標(biāo)是實(shí)現(xiàn)一個(gè)基于優(yōu)先級調(diào)度的搶占式的實(shí)時(shí)內(nèi)核,并在這個(gè)內(nèi)核之上提供最基本的系統(tǒng)服務(wù),如信號量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。
發(fā)表于 09-17 07:04
?2164次閱讀
,如下圖所示。uC/OS-II內(nèi)核結(jié)構(gòu)2、對各部分的進(jìn)一步解釋:第一部分 (1):與硬件無關(guān)的高層的操作系統(tǒng)部分大部分是關(guān)于任務(wù)的創(chuàng)建、信號量的創(chuàng)建、郵箱和隊(duì)列的創(chuàng)建,以...
發(fā)表于 12-23 19:58
?5次下載
在uC/OS-II中郵箱是線程(任務(wù))通訊的一種,使用郵箱能夠發(fā)送一個(gè)指針,當(dāng)然也可以發(fā)送指針大小的數(shù)據(jù)。
發(fā)表于 09-11 15:35
?1164次閱讀
評論