小智機器人中的部分關鍵函數,FreeRTOS中`xEventGroupWaitBits`函數的詳細解析

以下是對FreeRTOS中xEventGroupWaitBits函數的詳細解析:


函數功能

xEventGroupWaitBits用于在事件組中等待指定的位被設置。它可以配置為等待任意一個位所有位,并支持超時機制。
注意:該函數不能在中斷中調用


函數原型

EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToWaitFor,const BaseType_t xClearOnExit,const BaseType_t xWaitForAllBits,TickType_t xTicksToWait
);

參數解析

  1. xEventGroup

    • 事件組的句柄,必須通過xEventGroupCreate()創建。
  2. uxBitsToWaitFor

    • 指定需要等待的位掩碼(bitmask)。例如:
      BIT_0 | BIT_4  // 等待位0或位4
      
  3. xClearOnExit

    • 控制是否在函數返回前清除事件組中被設置的位:
      • pdTRUE:清除uxBitsToWaitFor中所有已設置的位(僅當等待條件滿足時)。
      • pdFALSE:不修改事件組的位。
  4. xWaitForAllBits

    • 決定等待條件:
      • pdTRUE:等待uxBitsToWaitFor所有位被設置。
      • pdFALSE:等待uxBitsToWaitFor任意一位被設置。
  5. xTicksToWait

    • 最大阻塞時間(單位:ticks)。
    • 使用portMAX_DELAY可無限期阻塞(需在FreeRTOSConfig.h中定義INCLUDE_vTaskSuspend為1)。

返回值

返回事件組在函數返回時的當前值。需通過位運算檢查哪些位被設置:

  • 如果因超時返回,返回值可能不包含所有期望的位。
  • 如果因位設置返回,返回值是清除操作前的事件組值(當xClearOnExitpdTRUE時)。

典型用法

1. 等待任意一位
EventBits_t bits = xEventGroupWaitBits(xEventGroup,      // 事件組句柄BIT_0 | BIT_4,    // 等待位0或位4pdTRUE,           // 清除已設置的位pdFALSE,          // 等待任意一位100 / portTICK_PERIOD_MS  // 最多等待100ms
);if ((bits & BIT_0) != 0) {// 位0被設置
} else if ((bits & BIT_4) != 0) {// 位4被設置
} else {// 超時
}
2. 等待所有位
EventBits_t bits = xEventGroupWaitBits(xEventGroup,BIT_0 | BIT_4,pdFALSE,          // 不清除位pdTRUE,           // 等待所有位portMAX_DELAY     // 無限期等待
);if ((bits & (BIT_0 | BIT_4)) == (BIT_0 | BIT_4)) {// 所有位都被設置
}

注意事項

  1. 中斷限制:不能在中斷中調用此函數。
  2. 超時處理:需檢查返回值是否包含期望的位,以判斷是否超時。
  3. 位清除時機xClearOnExitpdTRUE時,僅在等待條件滿足時清除位。
  4. 性能優化:避免過長的阻塞時間,防止影響系統調度。

與其他函數配合

  • 設置位:使用xEventGroupSetBits()
  • 清除位:使用xEventGroupClearBits()
  • 同步操作:結合xEventGroupSync()實現更復雜的同步邏輯。

通過合理配置參數,xEventGroupWaitBits可靈活實現任務間的事件通知與同步。

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

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

相關文章

關注分離(Separation of Concerns)在前端開發中的實踐演進:從 XMLHttpRequest 到 Fetch API

關注分離(Separation of Concerns)在前端開發中的實踐演進:從 XMLHttpRequest 到 Fetch API 一、關注分離的核心價值 關注分離(SoC)是軟件工程領域的重要設計原則,強調將系統分解為不同維度的功能模塊&am…

C之(16)scan-build與clang-tidy使用

C之(16)scan-build與clang-tidy使用 Author: Once Day Date: 2025年3月29日 一位熱衷于Linux學習和開發的菜鳥,試圖譜寫一場冒險之旅,也許終點只是一場白日夢… 漫漫長路,有人對你微笑過嘛… 全系列文章可參考專欄: Linux實踐記錄_Once_da…

在 Vue 項目中快速集成 Vant 組件庫

目錄 引言一、找到 src 下的App.js 寫入代碼。二、安裝Vant三、解決 polyfill 問題四、查看依賴五、配置webpack六、引入 Vant七、在組件中使用 Vant八、在瀏覽器中查看樣式總結 引言 在開發移動端 Vue 項目時,選擇一個高效、輕量且功能豐富的組件庫是提升開發效率…

“GPU 擠不動了?”——聊聊基于 GPU 的計算資源管理

“GPU 擠不動了?”——聊聊基于 GPU 的計算資源管理 作者:Echo_Wish “老板:為什么 GPU 服務器卡得跟 PPT 一樣?” “運維:我們任務隊列爆炸了,得優化資源管理!” 在 AI 訓練、深度學習、科學計算的場景下,GPU 計算資源已經成為香餑餑。但 GPU 服務器貴得離譜,一臺 A…

AI滲透測試:網絡安全的“黑魔法”還是“白魔法”?

引言:AI滲透測試,安全圈的“新魔法師” 想象一下,你是個網絡安全新手,手里攥著一堆工具,正準備硬著頭皮上陣。這時,AI蹦出來,拍著胸脯說:“別慌,我3秒掃完漏洞&#xff0…

(二)GEE基礎學習初探及案例詳解【20250330】

Google Earth Engine(GEE)是由谷歌公司開發的眾多應用之一。借助谷歌公司超強的服務器運算能力以及與NASA的合作關系,GEE平臺將Landsat、MODIS、Sentinel等可以公開獲取的遙感圖像數據存儲在谷歌的磁盤陣列中,使得GEE用戶可以方便的提取、調用和分析海量…

redhat認證是永久的嗎

?認證有效期 ?紅帽認證一般有效期為3年?(如RHCSA、RHCE、RHCA等),從通過考試之日起計算。 ?例外:部分基礎或工程師認證(如Red Hat Certified Engineer)有效期為三年時間,以官方最新政策為準…

git --- cherry pick

git --- cherry pick cherry pick cherry pick Cherry Pick 是 Git 中的一個操作,它允許你選擇某個分支的某次(或多次)提交,并將其應用到當前分支,而不會合并整個分支的所有更改。 cherry pick 的作用 只提取某個特定的…

妙用《甄嬛傳》中的選妃來記憶概率論中的乘法公式

強烈推薦最近在看的不錯的B站概率論課程 《概率統計》正課,零廢話,超精講!【孔祥仁】 《概率統計》正課,零廢話,超精講!【孔祥仁】_嗶哩嗶哩_bilibili 其中概率論中的乘法公式,老師用了《甄嬛傳…

AI 的出現是否能替代 IT 從業者?

AI 的出現是否能替代 IT 從業者? AI 的快速發展正在深刻改變各行各業,IT 行業也不例外。然而,AI 并非完全替代 IT 從業者,而是與其形成互補關系。本文將從 AI 的優勢、IT 從業者的不可替代性、未來趨勢等方面,探討 AI…

【leetcode100】有效的括號

1、題目描述 給定一個只包括 (,),{,},[,] 的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。每個右括號都有一個對應的…

為什么使用Flask + uWSGI + Nginx 部署服務?

概述 在Python開發的web應用中,我們通常能夠看到flask、uWSGI、Nginx出現在一起,他們之間的關系是什么?為什么總是被應用在一起?  三者共同使用為了實現一個目的:客戶端向服務端發送數據請求,服…

接口等冪處理

介紹 ? 什么是等冪(Idempotency)? 等冪 無論這個操作被執行多少次,結果都是一樣的,不會因為多次執行而產生副作用。 通俗一點說:“點一次和點一百次,效果是一樣的。” ? 在接口中&#xff0…

P1090合并果子(優先隊列)

洛谷題目 這里使用的是優先隊列&#xff0c;非常簡單 首先讓我們一起來學習一下優先隊列&#xff08;默認是從大到小來排列&#xff09; 首先要使用頭文件 #include<queue> using namespace std; 然后聲明有限隊列 priority_queue<int> a; priority_queue&…

藍橋杯備考---->并查集之 Lake Counting

這道題就統計有多少個連通塊就行了 這時候我們又需要把二維轉成一維了&#xff0c;也就是把每一個格子都給一個編號 當我們合并連通塊的時候&#xff0c;其實是只需要四個方向的 因為我們是從上往下遍歷的&#xff0c;我們遍歷到某個位置的時候&#xff0c;它已經和上面部分…

React受控表單綁定

受控表單綁定 在 React 中&#xff0c;受控組件&#xff08;Controlled Component&#xff09;是指表單元素的值由 React 組件的 state 管理&#xff0c;React 通過 onChange 事件監聽輸入變化&#xff0c;并實時更新 state&#xff0c;從而控制表單輸入值。 為什么要使用受控…

8、linux c 信號機制

一、信號概述 1. 信號概念 信號是一種在軟件層次上對中斷機制的模擬&#xff0c;是一種異步通信方式。信號的產生和處理都由操作系統內核完成&#xff0c;用于在進程之間傳遞信息或通知某些事件的發生。 2. 信號的產生 信號可以通過以下方式產生&#xff1a; 按鍵產生&…

CSP-J 2019 入門級 第一輪(初賽) 完善程序(2)

【題目】 CSP-J 2019 入門級 第一輪&#xff08;初賽&#xff09; 完善程序&#xff08;2&#xff09; &#xff08;計數排序&#xff09;計數排序是一個廣泛使用的排序方法。下面的程序使用雙關鍵字計數排序&#xff0c;將n對10000 以內的整數&#xff0c;從小到大排序。 例如…

Vue3 項目通過 docxtemplater 插件動態渲染 .docx 文檔(帶圖片)預覽,并導出

Vue3 項目通過 docxtemplater 插件動態渲染 .docx 文檔&#xff08;帶圖片&#xff09;預覽&#xff0c;并導出 預覽安裝插件示例代碼項目目錄結構截圖實際效果截圖 動態渲染 .docx 文檔&#xff08;帶圖片&#xff09;&#xff0c;預覽、導出安裝插件docx 模板文件內容完整代碼…

養老更安心!智紳科技“智慧”養老系統,智在何處?

在老齡化趨勢不斷加劇的當下&#xff0c;養老問題成為全社會關注的焦點。 人們對于養老服務的需求日益增長&#xff0c;不僅期望能夠得到基本的生活照料&#xff0c;更渴望在安全、舒適、便捷的環境中安享晚年。 智紳科技的“智慧”養老系統應運而生&#xff0c;憑借其獨特的…