色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FreeRTOS消息隊列介紹

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:嵌入式Linux系統開 ? 2023-07-06 16:58 ? 次閱讀

隊列是為了任務與任務、任務與中斷之間的通信而準備的,可以在任務與任務、任務與中斷之間傳遞消息,隊列中可以存儲有限的、大小固定的數據項目。任務與任務、任務與中斷之間要交流的數據保存在隊列中,叫做隊列項目。隊列所能保存的最大數據項目數量叫做隊列的長度,創建隊列的時候會指定數據項目的大小和隊列的長度。

通常隊列采用先進先出(FIFO)的存儲緩沖機制,也就是往隊列發送數據的時候(也叫入隊)永遠都是發送到隊列的尾部,而從隊列提取數據的時候(也叫出隊)是從隊列的頭部提取的。但是也可以使用

LIFO 的存儲緩沖,也就是后進先出,FreeRTOS 中的隊列也提供了 LIFO 的存儲緩沖機制。

數據發送到隊列中會導致數據拷貝,也就是將要發送的數據拷貝到隊列中,這就意味著在隊列中存儲的是數據的原始值,而不是原數據的引用(即只傳遞數據的指針),這個也叫做值傳遞。UCOS

的消息隊列采用的是引用傳遞,傳遞的是消息指針。采用引用傳遞的話消息內容就必須一直保持可見性,也就是消息內容必須有效,那么局部變量這種可能會隨時被刪掉的東西就不能用來傳遞消息,但是采用引用傳遞會節省時間??!因為不用進行數據拷貝。

采用值傳遞的話雖然會導致數據拷貝,會浪費一點時間,但是一旦將消息發送到隊列中原始的數據緩沖區就可以刪除掉或者覆寫,這樣的話這些緩沖區就可以被重復的使用。FreeRTOS中使用隊列傳遞消息的話雖然使用的是數據拷貝,但是也可以使用引用來傳遞消息啊,我直接往隊列中發送指向這個消息的地址指針不就可以了!這樣當我要發送的消息數據太大的時候就可以直接發送消息緩沖區的地址指針,比如在網絡應用環境中,網絡的數據量往往都很大的,采用數據拷貝的話就不現實。

1、多任務訪問

隊列不是屬于某個特別指定的任務的,任何任務都可以向隊列中發送消息,或者從隊列中提取消息。

2、出隊阻塞

當任務嘗試從一個隊列中讀取消息的時候可以指定一個阻塞時間,這個阻塞時間就是當任務從隊列中讀取消息無效的時候任務阻塞的時間。出隊就是就從隊列中讀取消息,出隊阻塞是針對從隊列中讀取消息的任務而言的。

比如任務 A 用于處理串口接收到的數據,串口接收到數據以后就會放到隊列 Q 中,任務 A 從隊列 Q 中讀取數據。但是如果此時隊列 Q

是空的,說明還沒有數據,任務 A 這時候來讀取的話肯定是獲取不到任何東西,那該怎么辦呢?任務 A

現在有三種選擇,一:二話不說扭頭就走,二:要不我在等等吧,等一會看看,說不定一會就有數據了,三:死等,死也要等到你有數據!選哪一個就是由這個阻塞時間決定的,這個阻塞時間單位是時鐘節拍數。阻塞時間為

0 的話就是不阻塞,沒有數據的話就馬上返回任務繼續執行接下來的代碼,對應第一種選擇。如果阻塞時間為 0~

portMAX_DELAY,當任務沒有從隊列中獲取到消息的話就進入阻塞態,阻塞時間指定了任務進入阻塞態的時間,當阻塞時間到了以后還沒有接收到數據的話就退出阻塞態,返回任務接著運行下面的代碼,如果在阻塞時間內接收到了數據就立即返回,執行任務中下面的代碼,這種情況對應第二種選擇。當阻塞時間設置為portMAX_DELAY

的話,任務就會一直進入阻塞態等待,直到接收到數據為止!這個就是第三種選擇。

3、入隊阻塞

入隊說的是向隊列中發送消息,將消息加入到隊列中。和出隊阻塞一樣,當一個任務向隊列發送消息的話也可以設置阻塞時間。比如任務 B 向消息隊列 Q

發送消息,但是此時隊列 Q 是滿的,那肯定是發送失敗的。此時任務 B 就會遇到和上面任務 A 一樣的問題,這兩種情況的處理過程是類似的,只不過一個是向隊列 Q

發送消息,一個是從隊列 Q 讀取消息而已。

4、隊列操作過程圖示

圖片圖片圖片圖片圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5082

    文章

    19104

    瀏覽量

    304816
  • 數據
    +關注

    關注

    8

    文章

    7002

    瀏覽量

    88943
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62143
收藏 人收藏

    評論

    相關推薦

    基于FreeRTOS的STM32F103系統—隊列

    FreeRTOS中,隊列是實現任務之間同步、互斥和通信的一種重要方法(其他的實現方法有:任務通知、事件組、信號量、互斥量)。
    的頭像 發表于 11-10 11:37 ?1131次閱讀
    基于<b class='flag-5'>FreeRTOS</b>的STM32F103系統—<b class='flag-5'>隊列</b>

    轉:第20章 FreeRTOS消息隊列

    第20章FreeRTOS消息隊列 本章節為大家講解FreeRTOS的一個重要的通信機制----消息隊列,初學者要熟練掌握,因為消息隊列在實際
    發表于 09-04 14:41

    FreeRTOS創建消息隊列問題如何解決

    剛開始學習FreeRTOS,用的是STM32F103RCT6,目前創建了三個任務,運行指示燈、按鍵、顯示。其中顯示任務里是暫時還沒有具體的代碼,按鍵任務準備使用隊列傳遞按鍵值。現在的問題是這樣
    發表于 07-19 08:03

    FreeRTOS中的隊列如何使用?

    FreeRTOS中的隊列如何使用?
    發表于 12-09 06:24

    FreeRTOS消息隊列有何作用

    FreeRTOS消息隊列 & ESP32實戰FreeRTOS消息隊列FreeRTOS的消息隊列
    發表于 01-27 06:53

    FreeRTOS源碼介紹

    。而且一些常用的功能,隊列,內存管理,信號量之類的,都有,基本上徹底弄懂一個,對以后理解別的也有幫助。1. FreeRTOS介紹FreeRTOS其實不用再多
    發表于 02-14 07:42

    FreeRTOS消息隊列和RT-Thread消息隊列的使用注意事項介紹

    一、FreeRTOS消息隊列1.1 創建消息隊列xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength, // 隊列
    發表于 05-25 15:32

    FreeRTOS消息隊列 & ESP32使用

    FreeRTOS消息隊列 & ESP32實戰FreeRTOS消息隊列FreeRTOS的消息隊列
    發表于 12-03 17:51 ?1次下載
    <b class='flag-5'>FreeRTOS</b>消息<b class='flag-5'>隊列</b> & ESP32使用

    FreeRTOS學習(五)消息隊列和二值信號量 xQueue / xSemaphore

    消息隊列可以和中斷 人物間發送和接受不定長的消息,在消息隊列中會使任務進入阻塞。 可以在調度器開始前,創建消息隊列。#include "FreeRTOS.h"#include
    發表于 12-04 20:06 ?7次下載
    <b class='flag-5'>FreeRTOS</b>學習(五)消息<b class='flag-5'>隊列</b>和二值信號量 xQueue / xSemaphore

    FreeRTOS消息隊列 傳遞結構體指針和結構體異同

    FreeRTOS消息隊列 傳遞結構體指針和結構體異同
    發表于 12-08 12:06 ?6次下載
    <b class='flag-5'>FreeRTOS</b>消息<b class='flag-5'>隊列</b> 傳遞結構體指針和結構體異同

    FreeRTOS 隊列 信號量 互斥量

    文章目錄前言Queue 隊列semaphore 信號量Mutex 互斥量微信公眾號前言FreeRTOS STM32CubeMX配置 內存管理 任務管理上節介紹了用STM32CubeMX生成帶
    發表于 12-09 09:51 ?0次下載
    <b class='flag-5'>FreeRTOS</b> <b class='flag-5'>隊列</b> 信號量 互斥量

    FreeRTOS高級篇5---FreeRTOS隊列分析

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

    FreeRTOS系列第18篇---FreeRTOS隊列API函數

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

    FreeRTOS的消息隊列

    基于 FreeRTOS 的應用程序由一組獨立的任務構成——每個任務都是具有獨立權限的程序。這些獨立的任務之間的通訊與同步一般都是基于操作系統提供的IPC通訊機制,而FreeRTOS 中所有的通信與同步機制都是基于隊列實現的。
    的頭像 發表于 02-14 09:56 ?886次閱讀
    <b class='flag-5'>FreeRTOS</b>的消息<b class='flag-5'>隊列</b>

    FreeRTOS消息隊列結構體

    有一個結構體用于描述隊列,叫做 Queue_t,這個結構體在文件 queue.c 中定義。 3、隊列創建 在使用隊列之前必須先創建隊列,有兩種創建
    的頭像 發表于 07-06 17:03 ?1094次閱讀
    <b class='flag-5'>FreeRTOS</b>消息<b class='flag-5'>隊列</b>結構體
    主站蜘蛛池模板: 国产乱码一区二区三区| 亚洲精品久久久久AV无码| 国产午夜一级淫片| 超碰98人人插| 在线亚洲97se| 亚洲AV无码久久流水呻蜜桃久色| 男男h啪肉np文总受| 國産麻豆AVMDMD0179| xxx性欧美在线观看| 最近中文字幕MV免费高清视频8 | jaPanesmature儿母| 友田真希息与子中文字幕| 午夜国产精品视频| 欧美白人战黑吊| 蜜臀AV熟女人妻中文字幕| 久久99re6热在线播放| 成人在线视频网站| 成人无码国产AV免费看直播| 99久久e免费热视频百度| 伊人久久青青| 亚洲无遮挡无码A片在线| 亚洲天堂999| 伊人久久影院| 亚洲bt区| 羞羞漫画免费漫画页面在线看漫画秋蝉| 桥本有菜护士| 欧美GV肉片视频免费观看| 扒开美女下面粉嫩粉嫩冒白浆| 妖精视频免费看| 不分昼夜H1V3| 亚洲中文字幕无码爆乳APP| 色偷偷男人| 欧美最新色p图| 伦理片午夜在线视频| 国产综合18久久久久久软件| 69久久国产精品热88人妻| 中文字幕无线手机在线| 中字幕视频在线永久在线| 中文无码乱人伦中文视频播放| 艳鉧动漫片1~6全集在线| 一本道在线综合久久88|