FreeRTOS 隊列結構體 xQUEUE 深度解析

一、核心成員與功能設計

FreeRTOS 的隊列結構體?xQUEUE?是任務間通信(IPC)的核心數據結構,通過統一的設計支持隊列、信號量、互斥量等多種同步機制。其設計體現了 ?**"數據拷貝 + 結構復用"** 的理念,兼顧輕量化與擴展性。

typedef struct QueueDefinition {int8_t *pcHead;           // 隊列存儲區起始地址 [1,4](@ref)int8_t *pcWriteTo;        // 下一個空閑寫入位置 [4,5](@ref)union {                   // 類型復用聯合體QueuePointers_t xQueue;     // 隊列模式讀寫指針SemaphoreData_t xSemaphore; // 信號量模式數據結構} u;List_t xTasksWaitingToSend;      // 發送阻塞任務列表(按優先級排序)[3,5](@ref)List_t xTasksWaitingToReceive;   // 接收阻塞任務列表(按優先級排序)[3,5](@ref)volatile UBaseType_t uxMessagesWaiting; // 當前隊列消息數量 [4,5](@ref)UBaseType_t uxLength;            // 隊列容量(最大消息數)[1,4](@ref)UBaseType_t uxItemSize;          // 單個消息字節大小 [1,4](@ref)volatile int8_t cRxLock;         // 接收鎖定計數器 [3,4](@ref)volatile int8_t cTxLock;         // 發送鎖定計數器 [3,4](@ref)// ... 其他配置相關字段
} xQUEUE;

二、關鍵成員詳解
1. ?存儲管理機制
  • ?**pcHead?與?pcWriteTo**
    構成循環緩沖區的基礎指針。pcHead?指向存儲區物理起始地址,pcWriteTo?動態標記下一個寫入位置,實現 FIFO 隊列的線性地址映射?。

  • ?數據拷貝策略
    采用 ?內存復制?(非引用傳遞)確保數據完整性,避免裸機全局變量共享導致的競態風險(如中斷與任務數據沖突)。例如溫度監控場景中,溫度數據被完整復制到隊列,避免讀寫半值問題?。

2. ?任務阻塞管理
  • ?**xTasksWaitingToSend/Receive**
    雙向鏈表結構管理阻塞任務,按優先級排序實現確定性喚醒。當隊列滿/空時,任務加入對應列表,觸發調度器優先級判斷?。

    ?示例:隊列滿時,高優先級發送任務會搶占低優先級任務資源 。
  • ?阻塞超時機制
    支持?xTicksToWait?參數設置最大等待時間,超時后任務自動就緒并返回錯誤碼(如?errQUEUE_FULL)。

3. ?類型復用設計
  • ?聯合體?u?的妙用
    • ?隊列模式QueuePointers_t?維護?pcReadFrom?指針,實現 FIFO/LIFO 雙模式讀取 。
    • ?信號量模式SemaphoreData_t?記錄持有者(xMutexHolder)和遞歸計數(uxRecursiveCallCount),支持優先級繼承與遞歸鎖 。
4. ?性能優化字段
  • ?**cRxLock/cTxLock**
    隊列鎖定期間統計操作次數,解鎖后批量處理。例如中斷中快速記錄發送次數(cTxLock++),退出臨界區后統一處理阻塞任務?。

  • ?**uxMessagesWaiting**
    原子變量記錄實時消息數,實現 O(1) 復雜度的狀態查詢,避免遍歷存儲區?。


三、設計對比與特性總結
?特性?FreeRTOS xQUEUE?RT-Thread rt_semaphore
?數據結構復用隊列/信號量/互斥量共用同一結構體?

4

獨立結構體設計
?內存管理支持動態/靜態分配(xQueueCreate/xQueueCreateStatic

4

5

主要靜態分配
?優先級策略優先級繼承(僅互斥量模式)

4

優先級繼承 + 天花板策略
?實時性優化鎖定計數器減少上下文切換?

3

4

中斷延遲更低(專為硬實時優化)

四、典型應用場景
  1. ?中斷-任務通信
    使用?xQueueSendFromISR?在中斷中傳遞數據,通過?pcWriteTo?快速寫入,cTxLock?記錄發送次數?。

  2. ?資源互斥訪問
    復用為互斥量時,SemaphoreData_t?字段實現遞歸鎖,防止任務重復獲取導致死鎖?。

  3. ?流量控制
    uxMessagesWaiting?監控隊列負載,動態調整生產者速率(如網絡協議棧流量控制)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73473.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73473.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

斜對角線的應用

引入 題目描述 經典應用:八皇后問題 dg和udg數組的解釋 對角線 d g [ u i ] d g [ u i ] dg[ui]dg[ui] dg[ui]dg[ui],反對角線 u d g [ n ? u i ] u d g [ n ? u i ] udg[n?ui]udg[n?ui] udg[n?ui]udg[n?ui]中的下標 u i ui ui和 n ? …

簡單聊聊Oracle和MySQL數據庫的區別和使用場景

對于IT的技術人員,MySQL是非常熟悉的開源數據庫,在各個行業被廣泛應用。但是對于Oracle數據庫,很多專業的IT從業人員不太了解,今天就來聊一聊Oracle和MySQL的一些區別。 1. 使用場景 首先MySQL是在各種IT公司或者非IT公司廣泛應用…

STM32學習筆記之存儲器映射(原理篇)

📢:如果你也對機器人、人工智能感興趣,看來我們志同道合? 📢:不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸對你有幫助,可點贊 👍…

mapbox V3 新特性,添加三維球鷹眼圖控件

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言1.1 ??mapboxgl.Map 地圖對象1.2 ??mapboxgl.Map style屬性1.3 ??mapbox-gl-globe-minimap 三維球體鷹眼…

MySQL-調優策略-SQL語句

引言 架構調優,在系統設計時首先需要充分考慮業務的實際情況,是否可以把不適合數據庫做的事情放到數據倉庫、搜索引擎或者緩存中去做;然后考慮寫的并發量有多大,是否需要采用分布式;最后考慮讀的壓力是否很大&#xf…

6502電氣集中聯鎖道岔控制電路的工作過程

6502電氣集中聯鎖道岔控制電路的工作過程主要包括選擇進路、轉換道岔、鎖閉進路、開放信號和解鎖進路等環節,以下是其具體工作過程模擬: 選擇進路: 按壓按鈕:操作人員在控制臺上按壓進路兩端的按鈕,如始端按鈕和終端按…

DS足球監控【比分直播】監控,釘釘實現自動提醒

文章目錄 目標網站分析詳細分析提醒工具代碼截圖成功提示對爬蟲、逆向感興趣的同學可以查看文章,一對一小班教學:https://blog.csdn.net/weixin_35770067/article/details/142514698 目標網站分析 https://live.dszuqiu.com/監控目標:實現固定時間內對比分監控,實現自動下單…

基于ssm的醫院預約掛號系統

一、系統架構 前端:jsp | bootstrap | jquery | css | ajax 后端:spring | springmvc | mybatis 環境:jdk1.8 | mysql | maven | tomcat 二、代碼及數據 三、功能介紹 01. 注冊 02. 登錄 03. 首頁 04. 醫院掛號 05. …

華為OD機試A卷 - 快遞業務站 計算快遞主站點(C++ Java JavaScript Python )

最新華為OD機試 真題目錄:點擊查看目錄 華為OD面試真題精選:點擊立即查看 題目描述 快遞業務范圍有 N 個站點,A 站點與 B 站點可以中轉快遞,則認為 A-B 站可達, 如果 A-B 可達,B-C 可達,則 A-C 可達。 現在給 N 個站點編號 0、1、…n-1,用 s[i][j]表示 i-j 是否可…

三維動態規劃-LeetCode3418. 機器人可以獲得的最大金幣數

太爽了!做完這道題,讓我感覺就像是斬殺了一條大龍!歷時72天,分3次花掉30小時。終獲突破! 零、題目 3418. 機器人可以獲得的最大金幣數 給你一個 m x n 的網格。一個機器人從網格的左上角 (0, 0) 出發,目…

相生、相克、乘侮、復雜病機及對應的臟腑功能聯系

一、五行相生關系(母子關系) 五行生序臟腑關系生理表現舉例木生火肝(木)滋養心(火)肝血充足則心血旺盛火生土心(火)溫煦脾(土)心陽充足則脾胃運化功能正常土…

Ubuntu22.04搭建freeradius操作說明

Ubuntu22.04搭建freeradius操作說明 更新依賴庫 sudo apt update sudo apt install build-essential sudo apt install libtalloc-dev sudo apt install libssl-dev 按照freeradius sudo apt install freeradius 修改freeradius配置 文件路徑如下 /etc/freeradius/3.…

es中安裝ik分詞器

在線安裝ik插件(較慢) docker exec -it es /bin/bash ./bin/es-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip 看到報錯了,我訪問一下。就是沒有了…

最大字段和問題 C++(窮舉、分治法、動態規劃)

問題描述 給定由n個整數(包含負整數)組成的序列a1,a2,…,an,求該序列子段和的最大值。規定當所有整數均為負值時定義其最大子段和為0 窮舉法 最簡單的方法就是窮舉法,用一個變量指示求和的開始位置,一個變量指示結束…

如何理解三極管截至區、放大區、飽和區

一、 三極管符號: NPN : PNP: 二、Vce、與Ic曲線圖 1、截至區:ib很小的時候就是截至區。因為Ib很小的時候等價于Ub很小,Ub如果不足以達到0.7V PN結就不會導通,所以三極管就…

電腦上我的windows目錄下,什么是可以刪除的

在Windows系統目錄(通常是C:\Windows)中,大部分文件和文件夾都是系統運行所必需的,隨意刪除可能導致系統崩潰或程序無法運行。不過,部分文件可以安全清理。以下是詳細指南: 可安全清理的內容 臨時文件&…

工作中遇到的spark SQL小問題:包含某個或某些字符的條件

今天又來總結工作中遇到的問題了,今天是SQL,spark引擎 需求描述,篩選渠道包含”線上化“的數據 也就是討論where里面的這個篩選條件怎么寫 一般起手都是 where QD like %線上化%‘ 學習了其他的寫法: 1.INSTR函數 where INSTR(QD,&quo…

Git 命令操作完全指南

Git 是現代軟件開發中不可或缺的分布式版本控制系統。它不僅能追蹤代碼變更,還能協調多人協作、管理項目歷史。本文從核心概念入手,逐步深入講解 Git 的基礎與高級命令,結合實用場景,幫助您從入門到精通。 一、Git 核心概念 理解…

深入剖析帶頭循環雙向鏈表的實現與應用

引言 場景描述 想象一個 環形地鐵線路(如深圳地鐵11號線),這條線路首尾相連,列車可以順時針或逆時針循環行駛。為了方便管理,地鐵系統設置了一個 “虛擬調度中心”(頭節點),它不承…

DeepSeek Smallpond 在火山引擎 AI 數據湖的探索實踐

資料來源:火山引擎-開發者社區 DeepSeek Smallpond 介紹 Smallpond 是一套由 DeepSeek 推出的 、針對 AI 領域,基于 Ray 和 DuckDB 實現的輕量級數據處理引擎,具有以下優點: 1.輕量級 2.高性能 3.支持規模大 4.無需運維 5.P…