女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

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

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

3天內不再提示

RTOS的流緩沖區機制解析

麥克泰技術 ? 來源:麥克泰技術 ? 2025-02-14 11:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

SAFERTOS中的流緩沖區(Stream buffer)機制,可以實現任務到任務或中斷到任務之間的通信。字節流是由發送方寫入緩沖區,接收方讀取緩沖區數據。流緩沖區作為隊列的輕量級級替代方案,適合單讀單寫場景,寫者在流緩沖區中放置任意數量的字節,讀者讀取任意數量的字節。

流緩沖區

顧名思義,存儲數據的結構是一個先進先出的緩沖區。通過調用xStreamBufferSend或xStreamBufferSendFromISR API寫緩沖區,將數據添加到緩沖區末尾,可以使用任務通知發信號通知等待任務。

流緩沖區有一個觸發級別,其值為流緩沖區必須寫入的最小字節數,因此,觸發級別值可以在1和流緩沖區的長度之間。緩沖區長度是有限的,這意味著如果從緩沖區讀操作發生得不夠快,緩沖區可能會滿。

因此,對緩沖區的寫入可以是阻塞的(非ISR函數可以阻塞),阻塞時間可以自定義。可以使用任務通知將緩沖區空閑空間通知寫任務。否則,所有數據需在阻塞時間內發送。

大多數情況下,由于對發送數據的處理太慢(讀任務的優先級太低,或者數據生成速度比預期的要快),緩沖區被盡可能多的字節填充,API將返回一個錯誤代碼以及寫入的數據量。

從流緩沖區中讀取數據通過調用xStreamBufferReceive或xStreamBufferReceiveFromISR完成。如果操作成功,函數返回一個狀態碼及讀取的數據。讀取數據的數量取決于流緩沖區中的可用字節數和指定數組的大小,可以指定阻塞時間(只有非ISR函數可以阻塞),如果規定的時間內沒有數據可用,或沒有任務通知解除阻塞,則會超時。盡管發生了超時,但流緩沖區中可能有數據,但不足以達到觸發級別(如果觸發級別大于1)。讀操作成功將返回可用數據。如果從滿流緩沖區中讀取數據,則發送任務通知給等待寫數據但由于緩沖區滿而阻塞的任務。

9bcd2330-ea80-11ef-9310-92fbcf53809c.png

圖1 Stream buffer示例

圖1的流緩沖器示例應用是一個模數轉換器,當數據可用時就會產生中斷。轉換后的數據在中斷服務程序中發送到緩沖區。然后,通知使用數據的任務從流緩沖區中讀取并處理數據,如過濾數據或計算控制器步長。

消息緩沖(message buffer)

消息緩沖區建立在流緩沖區上,用于交換離散的消息。消息具有定義的長度,其長度被附加到有效負載中。這意味著當發送10字節的消息時,消息的長度(數字10)首先添加到緩沖區中,因此接收方可以在讀取消息之前讀取該值,了解有多少字節的有效載荷。存儲消息長度的字節數是可配置的,必須預先定義,以便接收方確切地知道從緩沖區讀取多少字節以獲得下一條消息的長度。如何配置存儲消息長度的字節數取決于最大的消息長度,單個字節長度可用于最多255字節的消息,2字節長度字段可用于最多65535字節的消息。

緩沖區的大小應考慮最大消息長度和長度字段,例如,報文長度為10字節,長度字段2字節,每個消息的緩沖區中占用12字節。

在SAFERTOS中,流緩沖區和消息緩沖區使用相同的API函數。為了區分兩者,在StreamBuffer結構體中使用了一個額外的標志,在創建流/消息緩沖區時指定。API函數的行為略有不同。

使用流緩沖區時,如果指定了阻塞時間(只有非ISR函數可以阻塞),讀取和寫入操作可以阻塞。消息緩沖區的行為與流緩沖區相似。如果消息緩沖區中沒有消息,則消息緩沖區的讀取操作將被阻塞,任務將阻塞,直到阻塞時間到或足夠的數據被發送到消息緩沖區。因為消息不會部分發送,對于消息緩沖區,在大多數情況下觸發級別為1字節是最有用的,單個字節消息將解除等待任務阻塞。

如果緩沖區不夠用,寫操作就會阻塞,直到足夠的字節/消息從緩沖區中讀取,或阻塞時間超時。

9c356ff8-ea80-11ef-9310-92fbcf53809c.png

圖2 stream buffer序列

多核應用

流緩沖區和消息緩沖區也可以將在一個核上數據發送到另一個核上執行的任務/中斷中。在非對稱多處理器配置中,每個處理器運行自己的RTOS實例。為了在核間共享數據,必須使用共享內存保存流緩沖區數據。

為了通知讀核有新的數據產生,可以使用從一個核到另一個核的中斷。

SAFERTOS API有多個函數處理多核流緩沖區的使用,但核心功能很大程度上依賴于處理器體系結構。因此這些函數為弱定義的樁,必須由應用程序實現特定于核的功能。

要通知讀核一個緩沖區寫入完成,可以使用API函數vStreamBufferSendCompletedMulticore和vStreamBufferSendCompletedFromISRMulticore。如果另一個核上的任務試圖從空的流/消息緩沖區中讀取數據并等待數據發送,則調用這些函數。使用這些函數來代替單核場景中的任務通知,并且可以觸發等待核的中斷,從而解除等待讀取任務的阻塞。

使用vStreamBufferReceiveCompletedMulticore和StreamBufferReceiveCompletedFromISRMulticore函數通知寫核可用的緩沖區空間。如果另一個核上的任務試圖寫滿的緩沖區并等待發送數據,則調用這些函數。使用這些函數來代替單核場景中的任務通知,并且可以觸發等待核的中斷,從而解除等待寫入任務的阻塞。

多核應用的一個重要方面是對流/消息緩沖區數據訪問的協調。在單核設備上,一次只能有一個任務或中斷處于活動狀態,如果一個任務需要訪問數據結構而不被中斷,它可以在臨界區內操作。當多個核同時處于活動狀態時,必須防止對共享數據結構的并行訪問。因此,必須使用鎖定機制來確保核對緩沖區數據結構的獨占訪問。SAFERTOS提供xStreamBufferAttemptToLock和vStreamBufferReleaseLock函數實現此功能。這些函數也是弱定義的樁,應用程序必須基于特定于處理器的實現來協調訪問。

9c95620a-ea80-11ef-9310-92fbcf53809c.png

圖3 多核示例系統

基于流緩沖區機制可以實現任務間實時數據處理,有效地管理任務之間的數據流,確保RTOS應用程序中的高效通信和同步。

麥克泰技術是安全預認證操作系統SAFERTOS在中國的代理商,具有超過20年嵌入式實時操作系統和功能安全軟件服務的市場、服務和培訓經驗,聯系info@bmrtech.com。

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

    關注

    114

    文章

    17072

    瀏覽量

    183902
  • 嵌入式
    +關注

    關注

    5148

    文章

    19634

    瀏覽量

    316845
  • 模數轉換器
    +關注

    關注

    26

    文章

    3337

    瀏覽量

    128189
  • RTOS
    +關注

    關注

    24

    文章

    848

    瀏覽量

    121053
  • Stream
    +關注

    關注

    0

    文章

    21

    瀏覽量

    8126

原文標題:RTOS的Stream buffer通信機制

文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    解析RZ/N2L CANFD模塊的緩沖區機制(1)

    在工業自動化、智能交通、機器人等領域,CANFD(CAN with Flexible Data-Rate)技術正逐步取代傳統CAN,以適應更高的數據速率和更復雜的通信需求。本文將深入解析RZ/N2L CANFD模塊的緩沖區機制
    的頭像 發表于 05-19 14:10 ?458次閱讀
    <b class='flag-5'>解析</b>RZ/N2L CANFD模塊的<b class='flag-5'>緩沖區</b><b class='flag-5'>機制</b>(1)

    解析RZ/N2L CANFD模塊的緩沖區機制(2)

    在工業自動化、智能交通、機器人等領域,CANFD(CAN with Flexible Data-Rate)技術正逐步取代傳統CAN,以適應更高的數據速率和更復雜的通信需求。本文將深入解析RZ/N2L CANFD模塊的緩沖區機制
    的頭像 發表于 05-19 14:13 ?521次閱讀
    <b class='flag-5'>解析</b>RZ/N2L CANFD模塊的<b class='flag-5'>緩沖區</b><b class='flag-5'>機制</b>(2)

    FreeRTOS進階使用之流緩沖區:高效處理字節流的秘密武器

    解析其原理、特點、使用方法及注意事項,助你進階掌握這一關鍵技術。 一、緩沖區是什么?為什么需要它? 緩沖區是FreeRTOS中基于環形
    發表于 03-24 11:37

    基于狀態圖的緩沖區溢出攻擊分析

    結合緩沖區溢出攻擊產生的原理,分析緩沖區溢出攻擊代碼的結構,論述Snort規則對緩沖區溢出攻擊的檢測,在此基礎上構建一個基于狀態圖的緩沖區溢出攻擊的分析模型。該模型對
    發表于 04-10 08:46 ?32次下載

    清除鍵盤緩沖區原理

    清除鍵盤緩沖區原理 有時用戶的按鍵響應可能導致數據丟失或破壞了數據而不能挽回。在這種情況下,消除緩
    發表于 06-12 23:07 ?2203次閱讀

    環形緩沖區的實現原理

    在通信程序中,經常使用環形緩沖區作為數據結構來存放通信中發送和接收的數據。環形緩沖區是一個先進先出的循環緩沖區,可以向通信程序提供對緩沖區的互斥訪問。
    的頭像 發表于 03-22 10:03 ?7886次閱讀
    環形<b class='flag-5'>緩沖區</b>的實現原理

    緩沖區是啥意思 STM32串口數據接收之環形緩沖區

    緩沖區顧名思義是緩沖數據用的。實現緩沖區最簡單的辦法時,定義多個數組,接收一包數據到數組A,就把接收數據的地址換成數組B,每個數據有個標記字節用于表示這個數組是否收到數據,收到數據是否處理
    的頭像 發表于 07-22 15:33 ?1.1w次閱讀

    STM32串口數據接收 --環形緩沖區

    STM32串口數據接收 --環形緩沖區環形緩沖區簡介??在單片機中串口通信是我們使用最頻繁的,使用串口通信就會用到串口的數據接收與發送,環形緩沖區方式接收數據可以更好的保證數據丟幀率第。??在通信
    發表于 12-28 19:24 ?31次下載
    STM32串口數據接收 --環形<b class='flag-5'>緩沖區</b>

    什么是緩沖區?有什么作用

    緩沖區其實就是一個存儲區域,它是由專門的硬件寄存器所組成的。
    的頭像 發表于 02-02 09:57 ?2.7w次閱讀

    消除IoT上的緩沖區溢出漏洞

    黑客可以使用堆棧緩沖區溢出將可執行文件替換為惡意代碼,從而允許他們利用堆內存或調用堆棧本身等系統資源。例如,控制劫持利用堆棧緩沖區溢出將代碼執行重定向到正常操作中使用的位置以外的位置。
    的頭像 發表于 10-12 15:25 ?1154次閱讀
    消除IoT上的<b class='flag-5'>緩沖區</b>溢出漏洞

    消除物聯網上的緩沖區溢出漏洞

      黑客可以使用堆棧緩沖區溢出將可執行文件替換為惡意代碼,從而使他們能夠利用堆內存或調用堆棧本身等系統資源。例如,控制劫持利用堆棧緩沖區溢出將代碼執行重定向到正常操作中使用的位置以外的位置。
    的頭像 發表于 12-02 11:57 ?1264次閱讀

    環形緩沖區的實現思路

    單片機程序開發一般都會用到UART串口通信,通過通信來實現上位機和單片機程序的數據交互。通信中為了實現正常的收發,一般都會有對應的發送和接收緩存來暫存通信數據。這里使用環形緩沖區的方式來設計數據收發的緩存,即緩沖區溢出后,從緩沖區
    的頭像 發表于 01-17 15:07 ?2124次閱讀

    C++環形緩沖區設計與實現

    一、環形緩沖區基礎理論解析(Basic Theory of Circular Buffer) 1.1 環形緩沖區的定義與作用(Definition and Function of Circular
    的頭像 發表于 11-09 11:21 ?3115次閱讀
    C++環形<b class='flag-5'>緩沖區</b>設計與實現

    西門子博診斷緩沖區的使用方法

    可從在線和診斷視圖中“診斷”文件夾的“診斷緩沖區”組中讀出 CPU 的診斷緩沖區
    的頭像 發表于 12-11 10:24 ?6500次閱讀
    西門子博診斷<b class='flag-5'>緩沖區</b>的使用方法

    交換芯片緩沖區大小是什么

    交換芯片緩沖區大小并不一定是固定的。緩沖區的設計和實現會根據芯片的具體型號、規格以及應用場景的不同而有所差異。一些交換芯片可能具有固定大小的緩沖區,以滿足特定的性能需求或成本限制。然而,隨著技術
    的頭像 發表于 03-18 14:42 ?913次閱讀
    主站蜘蛛池模板: 贡觉县| 汉寿县| 黄龙县| 阿瓦提县| 佛山市| 卫辉市| 宝山区| 渝中区| 宣城市| 柘荣县| 重庆市| 洛隆县| 固安县| 莱州市| 阳东县| 平塘县| 兰州市| 旬邑县| 康乐县| 丰台区| 启东市| 崇仁县| 南陵县| 柳河县| 顺平县| 松原市| 吴旗县| 宜州市| 博兴县| 灌云县| 沽源县| 资中县| 鄄城县| 花莲市| 石嘴山市| 福贡县| 聂拉木县| 金塔县| 乐至县| 茌平县| 手游|