在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

RTOS的流緩沖區(qū)機(jī)制解析

麥克泰技術(shù) ? 來源:麥克泰技術(shù) ? 2025-02-14 11:33 ? 次閱讀

SAFERTOS中的流緩沖區(qū)(Stream buffer)機(jī)制,可以實(shí)現(xiàn)任務(wù)到任務(wù)或中斷到任務(wù)之間的通信。字節(jié)流是由發(fā)送方寫入緩沖區(qū),接收方讀取緩沖區(qū)數(shù)據(jù)。流緩沖區(qū)作為隊(duì)列的輕量級(jí)級(jí)替代方案,適合單讀單寫場(chǎng)景,寫者在流緩沖區(qū)中放置任意數(shù)量的字節(jié),讀者讀取任意數(shù)量的字節(jié)。

流緩沖區(qū)

顧名思義,存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)是一個(gè)先進(jìn)先出的緩沖區(qū)。通過調(diào)用xStreamBufferSend或xStreamBufferSendFromISR API寫緩沖區(qū),將數(shù)據(jù)添加到緩沖區(qū)末尾,可以使用任務(wù)通知發(fā)信號(hào)通知等待任務(wù)。

流緩沖區(qū)有一個(gè)觸發(fā)級(jí)別,其值為流緩沖區(qū)必須寫入的最小字節(jié)數(shù),因此,觸發(fā)級(jí)別值可以在1和流緩沖區(qū)的長(zhǎng)度之間。緩沖區(qū)長(zhǎng)度是有限的,這意味著如果從緩沖區(qū)讀操作發(fā)生得不夠快,緩沖區(qū)可能會(huì)滿。

因此,對(duì)緩沖區(qū)的寫入可以是阻塞的(非ISR函數(shù)可以阻塞),阻塞時(shí)間可以自定義。可以使用任務(wù)通知將緩沖區(qū)空閑空間通知寫任務(wù)。否則,所有數(shù)據(jù)需在阻塞時(shí)間內(nèi)發(fā)送。

大多數(shù)情況下,由于對(duì)發(fā)送數(shù)據(jù)的處理太慢(讀任務(wù)的優(yōu)先級(jí)太低,或者數(shù)據(jù)生成速度比預(yù)期的要快),緩沖區(qū)被盡可能多的字節(jié)填充,API將返回一個(gè)錯(cuò)誤代碼以及寫入的數(shù)據(jù)量。

從流緩沖區(qū)中讀取數(shù)據(jù)通過調(diào)用xStreamBufferReceive或xStreamBufferReceiveFromISR完成。如果操作成功,函數(shù)返回一個(gè)狀態(tài)碼及讀取的數(shù)據(jù)。讀取數(shù)據(jù)的數(shù)量取決于流緩沖區(qū)中的可用字節(jié)數(shù)和指定數(shù)組的大小,可以指定阻塞時(shí)間(只有非ISR函數(shù)可以阻塞),如果規(guī)定的時(shí)間內(nèi)沒有數(shù)據(jù)可用,或沒有任務(wù)通知解除阻塞,則會(huì)超時(shí)。盡管發(fā)生了超時(shí),但流緩沖區(qū)中可能有數(shù)據(jù),但不足以達(dá)到觸發(fā)級(jí)別(如果觸發(fā)級(jí)別大于1)。讀操作成功將返回可用數(shù)據(jù)。如果從滿流緩沖區(qū)中讀取數(shù)據(jù),則發(fā)送任務(wù)通知給等待寫數(shù)據(jù)但由于緩沖區(qū)滿而阻塞的任務(wù)。

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

圖1 Stream buffer示例

圖1的流緩沖器示例應(yīng)用是一個(gè)模數(shù)轉(zhuǎn)換器,當(dāng)數(shù)據(jù)可用時(shí)就會(huì)產(chǎn)生中斷。轉(zhuǎn)換后的數(shù)據(jù)在中斷服務(wù)程序中發(fā)送到緩沖區(qū)。然后,通知使用數(shù)據(jù)的任務(wù)從流緩沖區(qū)中讀取并處理數(shù)據(jù),如過濾數(shù)據(jù)或計(jì)算控制器步長(zhǎng)。

消息緩沖(message buffer)

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

緩沖區(qū)的大小應(yīng)考慮最大消息長(zhǎng)度和長(zhǎng)度字段,例如,報(bào)文長(zhǎng)度為10字節(jié),長(zhǎng)度字段2字節(jié),每個(gè)消息的緩沖區(qū)中占用12字節(jié)。

在SAFERTOS中,流緩沖區(qū)和消息緩沖區(qū)使用相同的API函數(shù)。為了區(qū)分兩者,在StreamBuffer結(jié)構(gòu)體中使用了一個(gè)額外的標(biāo)志,在創(chuàng)建流/消息緩沖區(qū)時(shí)指定。API函數(shù)的行為略有不同。

使用流緩沖區(qū)時(shí),如果指定了阻塞時(shí)間(只有非ISR函數(shù)可以阻塞),讀取和寫入操作可以阻塞。消息緩沖區(qū)的行為與流緩沖區(qū)相似。如果消息緩沖區(qū)中沒有消息,則消息緩沖區(qū)的讀取操作將被阻塞,任務(wù)將阻塞,直到阻塞時(shí)間到或足夠的數(shù)據(jù)被發(fā)送到消息緩沖區(qū)。因?yàn)橄⒉粫?huì)部分發(fā)送,對(duì)于消息緩沖區(qū),在大多數(shù)情況下觸發(fā)級(jí)別為1字節(jié)是最有用的,單個(gè)字節(jié)消息將解除等待任務(wù)阻塞。

如果緩沖區(qū)不夠用,寫操作就會(huì)阻塞,直到足夠的字節(jié)/消息從緩沖區(qū)中讀取,或阻塞時(shí)間超時(shí)。

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

圖2 stream buffer序列

多核應(yīng)用

流緩沖區(qū)和消息緩沖區(qū)也可以將在一個(gè)核上數(shù)據(jù)發(fā)送到另一個(gè)核上執(zhí)行的任務(wù)/中斷中。在非對(duì)稱多處理器配置中,每個(gè)處理器運(yùn)行自己的RTOS實(shí)例。為了在核間共享數(shù)據(jù),必須使用共享內(nèi)存保存流緩沖區(qū)數(shù)據(jù)。

為了通知讀核有新的數(shù)據(jù)產(chǎn)生,可以使用從一個(gè)核到另一個(gè)核的中斷。

SAFERTOS API有多個(gè)函數(shù)處理多核流緩沖區(qū)的使用,但核心功能很大程度上依賴于處理器體系結(jié)構(gòu)。因此這些函數(shù)為弱定義的樁,必須由應(yīng)用程序?qū)崿F(xiàn)特定于核的功能。

要通知讀核一個(gè)緩沖區(qū)寫入完成,可以使用API函數(shù)vStreamBufferSendCompletedMulticore和vStreamBufferSendCompletedFromISRMulticore。如果另一個(gè)核上的任務(wù)試圖從空的流/消息緩沖區(qū)中讀取數(shù)據(jù)并等待數(shù)據(jù)發(fā)送,則調(diào)用這些函數(shù)。使用這些函數(shù)來代替單核場(chǎng)景中的任務(wù)通知,并且可以觸發(fā)等待核的中斷,從而解除等待讀取任務(wù)的阻塞。

使用vStreamBufferReceiveCompletedMulticore和StreamBufferReceiveCompletedFromISRMulticore函數(shù)通知寫核可用的緩沖區(qū)空間。如果另一個(gè)核上的任務(wù)試圖寫滿的緩沖區(qū)并等待發(fā)送數(shù)據(jù),則調(diào)用這些函數(shù)。使用這些函數(shù)來代替單核場(chǎng)景中的任務(wù)通知,并且可以觸發(fā)等待核的中斷,從而解除等待寫入任務(wù)的阻塞。

多核應(yīng)用的一個(gè)重要方面是對(duì)流/消息緩沖區(qū)數(shù)據(jù)訪問的協(xié)調(diào)。在單核設(shè)備上,一次只能有一個(gè)任務(wù)或中斷處于活動(dòng)狀態(tài),如果一個(gè)任務(wù)需要訪問數(shù)據(jù)結(jié)構(gòu)而不被中斷,它可以在臨界區(qū)內(nèi)操作。當(dāng)多個(gè)核同時(shí)處于活動(dòng)狀態(tài)時(shí),必須防止對(duì)共享數(shù)據(jù)結(jié)構(gòu)的并行訪問。因此,必須使用鎖定機(jī)制來確保核對(duì)緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)的獨(dú)占訪問。SAFERTOS提供xStreamBufferAttemptToLock和vStreamBufferReleaseLock函數(shù)實(shí)現(xiàn)此功能。這些函數(shù)也是弱定義的樁,應(yīng)用程序必須基于特定于處理器的實(shí)現(xiàn)來協(xié)調(diào)訪問。

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

圖3 多核示例系統(tǒng)

基于流緩沖區(qū)機(jī)制可以實(shí)現(xiàn)任務(wù)間實(shí)時(shí)數(shù)據(jù)處理,有效地管理任務(wù)之間的數(shù)據(jù)流,確保RTOS應(yīng)用程序中的高效通信和同步。

麥克泰技術(shù)是安全預(yù)認(rèn)證操作系統(tǒng)SAFERTOS在中國的代理商,具有超過20年嵌入式實(shí)時(shí)操作系統(tǒng)和功能安全軟件服務(wù)的市場(chǎng)、服務(wù)和培訓(xùn)經(jīng)驗(yàn),聯(lián)系info@bmrtech.com。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16483

    瀏覽量

    179741
  • 嵌入式
    +關(guān)注

    關(guān)注

    5096

    文章

    19199

    瀏覽量

    308201
  • 模數(shù)轉(zhuǎn)換器

    關(guān)注

    26

    文章

    3222

    瀏覽量

    127073
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    821

    瀏覽量

    119939
  • Stream
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    8008

原文標(biāo)題:RTOS的Stream buffer通信機(jī)制

文章出處:【微信號(hào):麥克泰技術(shù),微信公眾號(hào):麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于狀態(tài)圖的緩沖區(qū)溢出攻擊分析

    結(jié)合緩沖區(qū)溢出攻擊產(chǎn)生的原理,分析緩沖區(qū)溢出攻擊代碼的結(jié)構(gòu),論述Snort規(guī)則對(duì)緩沖區(qū)溢出攻擊的檢測(cè),在此基礎(chǔ)上構(gòu)建一個(gè)基于狀態(tài)圖的緩沖區(qū)溢出攻擊的分析模型。該模型對(duì)
    發(fā)表于 04-10 08:46 ?32次下載

    基于可執(zhí)行代碼的緩沖區(qū)溢出檢測(cè)模型

    根據(jù)緩沖區(qū)溢出原理,提出一種基于可執(zhí)行代碼的緩沖區(qū)溢出檢測(cè)模型,給出該模型的理論基礎(chǔ),描述模型構(gòu)建的過程,提出新的緩沖區(qū)引用實(shí)例的識(shí)別方法。該模型將可執(zhí)行代碼
    發(fā)表于 04-20 09:26 ?31次下載

    Windows緩沖區(qū)溢出攻擊的實(shí)例研究

    本文首先詳細(xì)分析了Windows 緩沖區(qū)溢出的基本原理和具體流程。在此基礎(chǔ)上,通過對(duì)一個(gè)Windows 網(wǎng)絡(luò)緩沖區(qū)溢出攻擊實(shí)例的詳細(xì)調(diào)試分析,研究了Windows 緩沖區(qū)溢出攻擊的整個(gè)過程,
    發(fā)表于 08-28 09:44 ?17次下載

    緩沖區(qū)溢出攻擊的防護(hù)技術(shù)分析

    緩沖區(qū)溢出攻擊已經(jīng)成為網(wǎng)絡(luò)攻擊的主要方式。本文首先分析了緩沖區(qū)溢出攻擊的基本原理,然后分析了形成緩沖區(qū)溢出攻擊的必要條件,并詳細(xì)討論了溢出攻擊的防護(hù)技術(shù)。
    發(fā)表于 09-02 10:50 ?9次下載

    清除鍵盤緩沖區(qū)原理

    清除鍵盤緩沖區(qū)原理 有時(shí)用戶的按鍵響應(yīng)可能導(dǎo)致數(shù)據(jù)丟失或破壞了數(shù)據(jù)而不能挽回。在這種情況下,消除緩
    發(fā)表于 06-12 23:07 ?2117次閱讀

    環(huán)形緩沖區(qū)的實(shí)現(xiàn)原理

    在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結(jié)構(gòu)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個(gè)先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對(duì)緩沖區(qū)的互斥訪問。
    的頭像 發(fā)表于 03-22 10:03 ?7615次閱讀
    環(huán)形<b class='flag-5'>緩沖區(qū)</b>的實(shí)現(xiàn)原理

    緩沖區(qū)是啥意思 STM32串口數(shù)據(jù)接收之環(huán)形緩沖區(qū)

    緩沖區(qū)顧名思義是緩沖數(shù)據(jù)用的。實(shí)現(xiàn)緩沖區(qū)最簡(jiǎn)單的辦法時(shí),定義多個(gè)數(shù)組,接收一包數(shù)據(jù)到數(shù)組A,就把接收數(shù)據(jù)的地址換成數(shù)組B,每個(gè)數(shù)據(jù)有個(gè)標(biāo)記字節(jié)用于表示這個(gè)數(shù)組是否收到數(shù)據(jù),收到數(shù)據(jù)是否處理
    的頭像 發(fā)表于 07-22 15:33 ?1.1w次閱讀

    STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)

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

    什么是緩沖區(qū)?有什么作用

    緩沖區(qū)其實(shí)就是一個(gè)存儲(chǔ)區(qū)域,它是由專門的硬件寄存器所組成的。
    的頭像 發(fā)表于 02-02 09:57 ?2.6w次閱讀

    消除IoT上的緩沖區(qū)溢出漏洞

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

    消除物聯(lián)網(wǎng)上的緩沖區(qū)溢出漏洞

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

    環(huán)形緩沖區(qū)的實(shí)現(xiàn)思路

    單片機(jī)程序開發(fā)一般都會(huì)用到UART串口通信,通過通信來實(shí)現(xiàn)上位機(jī)和單片機(jī)程序的數(shù)據(jù)交互。通信中為了實(shí)現(xiàn)正常的收發(fā),一般都會(huì)有對(duì)應(yīng)的發(fā)送和接收緩存來暫存通信數(shù)據(jù)。這里使用環(huán)形緩沖區(qū)的方式來設(shè)計(jì)數(shù)據(jù)收發(fā)的緩存,即緩沖區(qū)溢出后,從緩沖區(qū)
    的頭像 發(fā)表于 01-17 15:07 ?1720次閱讀

    C++環(huán)形緩沖區(qū)設(shè)計(jì)與實(shí)現(xiàn)

    一、環(huán)形緩沖區(qū)基礎(chǔ)理論解析(Basic Theory of Circular Buffer) 1.1 環(huán)形緩沖區(qū)的定義與作用(Definition and Function of Circular
    的頭像 發(fā)表于 11-09 11:21 ?2312次閱讀
    C++環(huán)形<b class='flag-5'>緩沖區(qū)</b>設(shè)計(jì)與實(shí)現(xiàn)

    西門子博診斷緩沖區(qū)的使用方法

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

    交換芯片緩沖區(qū)大小是什么

    交換芯片緩沖區(qū)大小并不一定是固定的。緩沖區(qū)的設(shè)計(jì)和實(shí)現(xiàn)會(huì)根據(jù)芯片的具體型號(hào)、規(guī)格以及應(yīng)用場(chǎng)景的不同而有所差異。一些交換芯片可能具有固定大小的緩沖區(qū),以滿足特定的性能需求或成本限制。然而,隨著技術(shù)
    的頭像 發(fā)表于 03-18 14:42 ?703次閱讀
    主站蜘蛛池模板: 爱爱小说视频永久免费网站 | 色多多网站在线观看 | 清纯漂亮小美女准备啪啪 | 久草免费在线播放 | 久久看精品 | 日韩精品免费一区二区三区 | 99久久精品久久久久久婷婷 | 人人做人人澡人人人爽 | 日本亚洲欧美美色 | 在线中文字幕一区 | 亚洲天天做日日做天天欢毛片 | 亚洲人成电影在在线观看网色 | 丁香六月啪啪 | 亚洲国产成人精品女人久久久 | 日本三级全黄三级a | 亚洲性久久久影院 | 欧美激情91 | 国产yw855.c免费视频 | 俄罗斯美女在线观看一区 | 色偷偷男人天堂 | 国产一级特黄在线视频 | 久久精品亚洲一级毛片 | 天天操婷婷 | 色婷婷在线视频观看 | 网色| 在线a免费观看最新网站 | 久久99热精品这里久久精品 | 国内a级毛片免费··· | www.日日爱| 日韩免费毛片 | 天堂网www在线观看 天堂网www在线资源中文 | 四虎永久精品免费网址大全 | 狠狠色噜噜狠狠狠狠98 | 男女交性视频免费 | 亚洲成人www| 激情啪啪网站 | 成人网在线看 | 日韩美毛片| 免费的三及片 | 亚洲人的天堂男人爽爽爽 | 超级碰碰青草久热国产 |