1、uC/OS-II隊(duì)列原理
消息隊(duì)列是線程間通訊的一種,主要用作數(shù)據(jù)緩沖,用途非常廣泛。一般情況下遵循先進(jìn)先出原則。先來(lái)看隊(duì)列結(jié)構(gòu)體:
uC/OS-II使用一個(gè)指針數(shù)組實(shí)現(xiàn)了消息隊(duì)列,數(shù)組中每個(gè)元素可以存放一個(gè)指針。當(dāng)然如果不傳輸指針傳輸普通數(shù)據(jù)也是可以的。
這個(gè)指針數(shù)組經(jīng)過(guò)函數(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ù)即將要插入的位置,換句話說(shuō)它指的地方是“空的”。
OSQPend()函數(shù)從隊(duì)列中取出數(shù)據(jù)后OSQOut移動(dòng)一個(gè)位置。如果OSQOut指針已經(jīng)旋轉(zhuǎn)到末尾,則重新指向起始位置。OSQOut指向最“舊”的數(shù)據(jù), 換句話說(shuō)它指的地方是“滿(mǎn)的”。
數(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)先級(jí)的線程,并把它恢復(fù)為運(yùn)行態(tài)。數(shù)據(jù)直接給了等待線程,沒(méi)有進(jìn)入環(huán)形隊(duì)列。
如果沒(méi)有線程等待,此函數(shù)把數(shù)據(jù)放入隊(duì)列,放入后OSQIn移動(dòng)一個(gè)位置,如果OSQIn已經(jīng)到了OSQEnd位置,重新設(shè)置為OSQStart。
如果隊(duì)列已經(jīng)滿(mǎn)了,再次調(diào)用此函數(shù),直接返回錯(cuò)誤碼,不會(huì)覆蓋隊(duì)列中的數(shù)據(jù)。
OSQPend()
此函數(shù)嘗試從隊(duì)列取出數(shù)據(jù),如果隊(duì)列中有數(shù)據(jù),那么把最舊的數(shù)據(jù)取出來(lái)。交給線程即可。如果隊(duì)列是空隊(duì)列,則掛起當(dāng)前線程,直至其它線程向隊(duì)列發(fā)送數(shù)據(jù)或者線程等待超時(shí)。
OSQAccept()
隊(duì)列中有數(shù)據(jù)取出來(lái),沒(méi)有數(shù)據(jù)也不會(huì)掛起線程??捎糜诓樵?xún)。
OSQFlush()
清空隊(duì)列
OSQPostFront()
反向放數(shù)據(jù),把數(shù)據(jù)放到隊(duì)列尾部。
OSQQuery()
隊(duì)列信息查詢(xún),信息放到結(jié)構(gòu)體中。
-
緩沖器
+關(guān)注
關(guān)注
6文章
2026瀏覽量
46339 -
消息隊(duì)列
+關(guān)注
關(guān)注
0文章
33瀏覽量
3063 -
ucos-ii
+關(guān)注
關(guān)注
1文章
11瀏覽量
3706
發(fā)布評(píng)論請(qǐng)先 登錄
uC/OS-II簡(jiǎn)介
uC/OS-II簡(jiǎn)介
uC/OS-II簡(jiǎn)介
uC/OS-II簡(jiǎn)介
uC/OS-II簡(jiǎn)介
uC/OS-II簡(jiǎn)介
如何去解決uC/OS-II中優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題?
uC/OS-II源碼包的下載
為什么想學(xué)uc/OS-II
基于uc/os-ii 的嵌入式GUI研究與應(yīng)用
uC/OS-II 應(yīng)用程序基本結(jié)構(gòu)及重要的API介紹
正點(diǎn)原子開(kāi)拓者FPGA Qsys視頻:uCOS II消息郵箱和消息隊(duì)列

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

評(píng)論