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

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

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

uC/OS-II隊(duì)列原理 隊(duì)列相關(guān)函數(shù)介紹

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

1、uC/OS-II隊(duì)列原理

消息隊(duì)列是線(xiàn)程間通訊的一種,主要用作數(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ù)即將要插入的位置,換句話(huà)說(shuō)它指的地方是“空的”。

OSQPend()函數(shù)從隊(duì)列中取出數(shù)據(jù)后OSQOut移動(dòng)一個(gè)位置。如果OSQOut指針已經(jīng)旋轉(zhuǎn)到末尾,則重新指向起始位置。OSQOut指向最“舊”的數(shù)據(jù), 換句話(huà)說(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ù),如果有線(xiàn)程正在等待數(shù)據(jù),則選取最高優(yōu)先級(jí)的線(xiàn)程,并把它恢復(fù)為運(yùn)行態(tài)。數(shù)據(jù)直接給了等待線(xiàn)程,沒(méi)有進(jìn)入環(huán)形隊(duì)列。

如果沒(méi)有線(xiàn)程等待,此函數(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)。交給線(xiàn)程即可。如果隊(duì)列是空隊(duì)列,則掛起當(dāng)前線(xiàn)程,直至其它線(xiàn)程向隊(duì)列發(fā)送數(shù)據(jù)或者線(xiàn)程等待超時(shí)。

OSQAccept()

隊(duì)列中有數(shù)據(jù)取出來(lái),沒(méi)有數(shù)據(jù)也不會(huì)掛起線(xiàn)程。可用于查詢(xún)。

OSQFlush()

清空隊(duì)列

OSQPostFront()

反向放數(shù)據(jù),把數(shù)據(jù)放到隊(duì)列尾部。

OSQQuery()

隊(duì)列信息查詢(xún),信息放到結(jié)構(gòu)體中。

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

    關(guān)注

    6

    文章

    1903

    瀏覽量

    45327
  • 消息隊(duì)列
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

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

    關(guān)注

    1

    文章

    11

    瀏覽量

    3567
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    uC/OS-II簡(jiǎn)介

    信號(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簡(jiǎn)介

    信號(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簡(jiǎn)介

    信號(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簡(jiǎn)介

    信號(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簡(jiǎn)介

    信號(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簡(jiǎn)介

    信號(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)問(wèn)題?

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

    uC/OS-II源碼包的下載

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

    uC/OS-II移植過(guò)程記錄

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

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

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

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

    正點(diǎn)原子開(kāi)拓者FPGA Qsys視頻:uCOS II消息郵箱和消息隊(duì)列

    uC/OS-II目標(biāo)是實(shí)現(xiàn)一個(gè)基于優(yōu)先級(jí)調(diào)度的搶占式的實(shí)時(shí)內(nèi)核,并在這個(gè)內(nèi)核之上提供最基本的系統(tǒng)服務(wù),如信號(hào)量,郵箱,消息隊(duì)列,內(nèi)存管理,中斷管理等。
    的頭像 發(fā)表于 09-17 07:04 ?2004次閱讀
    正點(diǎn)原子開(kāi)拓者FPGA Qsys視頻:uCOS <b class='flag-5'>II</b>消息郵箱和消息<b class='flag-5'>隊(duì)列</b>

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

    ,如下圖所示。uC/OS-II內(nèi)核結(jié)構(gòu)2、對(duì)各部分的進(jìn)一步解釋?zhuān)旱谝徊糠?(1):與硬件無(wú)關(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移植

    uC/OS-II—郵箱介紹

    uC/OS-II中郵箱是線(xiàn)程(任務(wù))通訊的一種,使用郵箱能夠發(fā)送一個(gè)指針,當(dāng)然也可以發(fā)送指針大小的數(shù)據(jù)。
    的頭像 發(fā)表于 09-11 15:35 ?975次閱讀