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

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

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

FreeRTOS消息隊(duì)列結(jié)構(gòu)體

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開(kāi)發(fā) ? 作者:嵌入式Linux系統(tǒng)開(kāi) ? 2023-07-06 17:03 ? 次閱讀

有一個(gè)結(jié)構(gòu)體用于描述隊(duì)列,叫做 Queue_t,這個(gè)結(jié)構(gòu)體在文件 queue.c 中定義。

3、隊(duì)列創(chuàng)建

在使用隊(duì)列之前必須先創(chuàng)建隊(duì)列,有兩種創(chuàng)建隊(duì)列的方法,一種是靜態(tài)的,使用函數(shù)xQueueCreateStatic();另一個(gè)是動(dòng)態(tài)的,使用函數(shù)

xQueueCreate()。這兩個(gè)函數(shù)本質(zhì)上都是宏,真正完成隊(duì)列創(chuàng)建的函數(shù)是 xQueueGenericCreate()和

xQueueGenericCreateStatic(),這兩個(gè)函數(shù)在文件 queue.c 中定義。

函數(shù) prvInitialiseNewQueue() 用于隊(duì)列的初始化,此函數(shù)在文件 queue.c 中定義。

函數(shù) prvInitialiseNewQueue()中調(diào)用了函數(shù) xQueueGenericReset()來(lái)復(fù)位隊(duì)列。

比如我們創(chuàng)建一個(gè)有 4 個(gè)隊(duì)列項(xiàng),每個(gè)隊(duì)列項(xiàng)長(zhǎng)度為 32 個(gè)字節(jié)的隊(duì)列 TestQueue,創(chuàng)建成功的隊(duì)列如圖所示:

圖片

在創(chuàng)建的時(shí)候需要指定此隊(duì)列的用途,也就是隊(duì)列類型,一共有六種類型:

queueQUEUE_TYPE_BASE 普通的消息隊(duì)列

queueQUEUE_TYPE_SET 隊(duì)列集

queueQUEUE_TYPE_MUTEX 互斥信號(hào)

queueQUEUE_TYPE_COUNTING_SEMAPHORE 計(jì)數(shù)型信號(hào)量

queueQUEUE_TYPE_BINARY_SEMAPHORE 二值信號(hào)量

queueQUEUE_TYPE_RECURSIVE_MUTEX 遞歸互斥信號(hào)量

4、向隊(duì)列發(fā)送消息

FreeRTOS 提供了 8 個(gè)向隊(duì)列發(fā)送消息的 API 函數(shù):

圖片

5、隊(duì)列上鎖和解鎖

隊(duì)列的上鎖和解鎖是兩個(gè) API 函數(shù):prvLockQueue()和 prvUnlockQueue()。

6、從隊(duì)列讀取消息

有入隊(duì)就有出隊(duì),出隊(duì)就是從隊(duì)列中獲取隊(duì)列項(xiàng)(消息),F(xiàn)reeRTOS 中出隊(duì)函數(shù)如表示:

具體的函數(shù)用法大家可以在用到的時(shí)候百度,這里就不詳細(xì)介紹了,大家知道有這些東西就行。其中最重要的是任務(wù)級(jí)和中斷級(jí)不一樣,在中斷處理函數(shù)中是由一套自己的

API 用的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎ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)注

    5052

    文章

    18912

    瀏覽量

    300809
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    483

    瀏覽量

    61853
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    127

    瀏覽量

    10812
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于STM32F407的FreeRTOS學(xué)習(xí)筆記(5)

    在數(shù)據(jù)結(jié)構(gòu)中有一種很重要的數(shù)據(jù)結(jié)構(gòu)叫做隊(duì)列,其特點(diǎn)是數(shù)據(jù)先進(jìn)先出。在FreeRTOS中也有一類隊(duì)列,我們利用這類
    的頭像 發(fā)表于 11-07 11:43 ?682次閱讀
    基于STM32F407的<b class='flag-5'>FreeRTOS</b>學(xué)習(xí)筆記(5)

    基于FreeRTOS的STM32F103系統(tǒng)—隊(duì)列

    FreeRTOS中,隊(duì)列是實(shí)現(xiàn)任務(wù)之間同步、互斥和通信的一種重要方法(其他的實(shí)現(xiàn)方法有:任務(wù)通知、事件組、信號(hào)量、互斥量)。
    的頭像 發(fā)表于 11-10 11:37 ?1056次閱讀
    基于<b class='flag-5'>FreeRTOS</b>的STM32F103系統(tǒng)—<b class='flag-5'>隊(duì)列</b>

    FreeRTOS使用隊(duì)列怎么發(fā)送一個(gè)結(jié)構(gòu)呢?

    怎么使用隊(duì)列,發(fā)送一個(gè)12個(gè)字節(jié)的結(jié)構(gòu)呢? osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec
    發(fā)表于 04-17 07:35

    請(qǐng)問(wèn)如何用隊(duì)列結(jié)構(gòu)實(shí)體,而非指針傳遞?

    我這個(gè)小型應(yīng)用來(lái)說(shuō),可以接收。但是發(fā)現(xiàn)隊(duì)列取出的數(shù)據(jù)不對(duì),是什么原因?如何用消息隊(duì)列傳傳結(jié)構(gòu)實(shí)體,而不是指針?
    發(fā)表于 06-17 09:01

    FreeRTOS創(chuàng)建消息隊(duì)列問(wèn)題如何解決

    剛開(kāi)始學(xué)習(xí)FreeRTOS,用的是STM32F103RCT6,目前創(chuàng)建了三個(gè)任務(wù),運(yùn)行指示燈、按鍵、顯示。其中顯示任務(wù)里是暫時(shí)還沒(méi)有具體的代碼,按鍵任務(wù)準(zhǔn)備使用隊(duì)列傳遞按鍵值?,F(xiàn)在的問(wèn)題是這樣
    發(fā)表于 07-19 08:03

    FreeRTOS中的隊(duì)列如何使用?

    FreeRTOS中的隊(duì)列如何使用?
    發(fā)表于 12-09 06:24

    FreeRTOS消息隊(duì)列有何作用

    FreeRTOS消息隊(duì)列 & ESP32實(shí)戰(zhàn)FreeRTOS消息隊(duì)列FreeRTOS的消息隊(duì)列
    發(fā)表于 01-27 06:53

    消息隊(duì)列傳遞結(jié)構(gòu)指針和結(jié)構(gòu)異同

    FreeRTOS消息隊(duì)列 傳遞結(jié)構(gòu)指針和結(jié)構(gòu)異同1 消息
    發(fā)表于 02-11 07:02

    FreeRTOS消息隊(duì)列 & ESP32使用

    FreeRTOS消息隊(duì)列 & ESP32實(shí)戰(zhàn)FreeRTOS消息隊(duì)列FreeRTOS的消息隊(duì)列
    發(fā)表于 12-03 17:51 ?1次下載
    <b class='flag-5'>FreeRTOS</b>消息<b class='flag-5'>隊(duì)列</b> & ESP32使用

    FreeRTOS消息隊(duì)列 傳遞結(jié)構(gòu)指針和結(jié)構(gòu)異同

    FreeRTOS消息隊(duì)列 傳遞結(jié)構(gòu)指針和結(jié)構(gòu)異同
    發(fā)表于 12-08 12:06 ?6次下載
    <b class='flag-5'>FreeRTOS</b>消息<b class='flag-5'>隊(duì)列</b> 傳遞<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>指針和<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>異同

    FreeRTOS 隊(duì)列 信號(hào)量 互斥量

    文章目錄前言Queue 隊(duì)列semaphore 信號(hào)量Mutex 互斥量微信公眾號(hào)前言FreeRTOS STM32CubeMX配置 內(nèi)存管理 任務(wù)管理上節(jié)介紹了用STM32CubeMX生成帶
    發(fā)表于 12-09 09:51 ?0次下載
    <b class='flag-5'>FreeRTOS</b> <b class='flag-5'>隊(duì)列</b> 信號(hào)量 互斥量

    FreeRTOS高級(jí)篇5---FreeRTOS隊(duì)列分析

    FreeRTOS提供了多種任務(wù)間通訊方式,包括:任務(wù)通知(版本V8.2以及以上版本)隊(duì)列二進(jìn)制信號(hào)量計(jì)數(shù)信號(hào)量互斥量遞歸互斥量其中,二進(jìn)制...
    發(fā)表于 01-26 17:40 ?9次下載
    <b class='flag-5'>FreeRTOS</b>高級(jí)篇5---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>隊(duì)列</b>分析

    FreeRTOS系列第18篇---FreeRTOS隊(duì)列API函數(shù)

    FreeRTOS為操作隊(duì)列提供了非常豐富的API函數(shù),包括隊(duì)列的創(chuàng)建、刪除,靈活的入隊(duì)和出隊(duì)方式、帶中斷保護(hù)的入隊(duì)和出隊(duì)等等。下面就來(lái)詳細(xì)...
    發(fā)表于 01-26 17:44 ?11次下載
    <b class='flag-5'>FreeRTOS</b>系列第18篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>隊(duì)列</b>API函數(shù)

    FreeRTOS的消息隊(duì)列

    基于 FreeRTOS 的應(yīng)用程序由一組獨(dú)立的任務(wù)構(gòu)成——每個(gè)任務(wù)都是具有獨(dú)立權(quán)限的程序。這些獨(dú)立的任務(wù)之間的通訊與同步一般都是基于操作系統(tǒng)提供的IPC通訊機(jī)制,而FreeRTOS 中所有的通信與同步機(jī)制都是基于隊(duì)列實(shí)現(xiàn)的。
    的頭像 發(fā)表于 02-14 09:56 ?831次閱讀
    <b class='flag-5'>FreeRTOS</b>的消息<b class='flag-5'>隊(duì)列</b>

    FreeRTOS消息隊(duì)列介紹

    隊(duì)列是為了任務(wù)與任務(wù)、任務(wù)與中斷之間的通信而準(zhǔn)備的,可以在任務(wù)與任務(wù)、任務(wù)與中斷之間傳遞消息,隊(duì)列中可以存儲(chǔ)有限的、大小固定的數(shù)據(jù)項(xiàng)目。任務(wù)與任務(wù)、任務(wù)與中斷之間要交流的數(shù)據(jù)保存在隊(duì)列中,叫做
    的頭像 發(fā)表于 07-06 16:58 ?745次閱讀
    <b class='flag-5'>FreeRTOS</b>消息<b class='flag-5'>隊(duì)列</b>介紹