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

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

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

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

ss ? 來(lái)源:博客園、CSDN ? 作者:Fireflycjd、IT_阿水 ? 2021-07-22 15:33 ? 次閱讀

緩沖區(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ù)是否處理完成。

缺點(diǎn):

①緩沖數(shù)據(jù)組數(shù)一定,且有多變量,代碼結(jié)構(gòu)不太清晰。

②接收數(shù)據(jù)長(zhǎng)度可能大于數(shù)組大小,也可能小于數(shù)組大小。不靈活,需要接收數(shù)據(jù)很長(zhǎng)時(shí)容易出錯(cuò),且內(nèi)存利用率低。

解決這個(gè)問(wèn)題的好辦法是:環(huán)形緩沖區(qū)。

環(huán)形緩沖區(qū)簡(jiǎn)介

環(huán)形緩沖區(qū)就是一個(gè)帶“頭指針”和“尾指針”的數(shù)組。在單片機(jī)中串口通信是我們使用最頻繁的,使用串口通信就會(huì)用到串口的數(shù)據(jù)接收與發(fā)送,環(huán)形緩沖區(qū)方式接收數(shù)據(jù)可以更好的保證數(shù)據(jù)丟幀率第。

在通信程序中,經(jīng)常使用環(huán)形緩沖器作為數(shù)據(jù)結(jié)構(gòu)來(lái)存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個(gè)先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對(duì)緩沖區(qū)的互斥訪(fǎng)問(wèn)。

環(huán)形緩沖區(qū)的一個(gè)有用特性是:當(dāng)一個(gè)數(shù)據(jù)元素被用掉后,其余數(shù)據(jù)元素不需要移動(dòng)其存儲(chǔ)位置。相反,一個(gè)非圓形緩沖區(qū)(例如一個(gè)普通的隊(duì)列)在用掉一個(gè)數(shù)據(jù)元素后,其余數(shù)據(jù)元素需要向前搬移。換句話(huà)說(shuō),環(huán)形緩沖區(qū)適合實(shí)現(xiàn)先進(jìn)先出緩沖區(qū),而非環(huán)形緩沖區(qū)適合后進(jìn)先出緩沖區(qū)。

整合自:博客園、CSDN

編輯:jq

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

    關(guān)注

    2262

    文章

    10846

    瀏覽量

    353676
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    內(nèi)存緩沖區(qū)和內(nèi)存的關(guān)系

    內(nèi)存緩沖區(qū)和內(nèi)存之間的關(guān)系是計(jì)算機(jī)體系結(jié)構(gòu)中一個(gè)至關(guān)重要的方面,它們共同協(xié)作以提高數(shù)據(jù)處理的效率和系統(tǒng)的整體性能。
    的頭像 發(fā)表于 09-10 14:38 ?274次閱讀

    單片機(jī)中的幾種環(huán)形緩沖區(qū)的分析和實(shí)現(xiàn)

    單片機(jī)中的幾種環(huán)形緩沖區(qū)的分析和實(shí)現(xiàn)一、簡(jiǎn)介環(huán)形緩沖區(qū)(RingBuffer)是一種高效的使用內(nèi)存的方法,它將一段固定長(zhǎng)度的內(nèi)存看成一個(gè)環(huán)形
    的頭像 發(fā)表于 08-14 08:39 ?532次閱讀
    單片機(jī)中的幾種<b class='flag-5'>環(huán)形</b><b class='flag-5'>緩沖區(qū)</b>的分析和實(shí)現(xiàn)

    ESP8266是否可以添加AT命令并使接收緩沖區(qū)大小可調(diào)?

    是否可以添加 AT 命令并使接收緩沖區(qū)大小可調(diào)? 在Arduino上,我總是丟棄數(shù)據(jù)字節(jié),而arduino硬件串行只有64字節(jié)的緩沖區(qū),看起來(lái)ESP8266有256個(gè)字節(jié)。
    發(fā)表于 07-17 07:36

    ESP8266有雙緩沖區(qū)嗎?

    為 1 ms),直到它充滿(mǎn),然后切換緩沖區(qū)并計(jì)數(shù)填充第二個(gè)緩沖區(qū),而不會(huì)丟失任何樣本。準(zhǔn)備好的填充緩沖區(qū)應(yīng)由一些標(biāo)志發(fā)出信號(hào),并且應(yīng)在接收到來(lái)自路由器的一些
    發(fā)表于 07-16 07:29

    創(chuàng)建DMA通道時(shí),能否將DMA緩沖區(qū)的大小指定為8字節(jié),并將DMA緩沖區(qū)的編號(hào)指定為1?

    創(chuàng)建 DMA 通道時(shí),能否將 DMA 緩沖區(qū)的大小指定為 8 字節(jié),并將 DMA 緩沖區(qū)的編號(hào)指定為 1?
    發(fā)表于 05-31 07:46

    stm32野火開(kāi)發(fā)板上做USB通信,PC端USB的緩沖區(qū)串口緩沖區(qū)的大小是多少?

    stm32野火開(kāi)發(fā)板上做USB通信,用的CDC虛擬串口。 stm32端將ADC采集的數(shù)據(jù)通過(guò)USB傳給電腦,傳輸速率理論上是12Mbps,上位機(jī)是從PC端的
    發(fā)表于 05-17 14:02

    具有八進(jìn)制反相緩沖區(qū)的掃描測(cè)試設(shè)備數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《具有八進(jìn)制反相緩沖區(qū)的掃描測(cè)試設(shè)備數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 05-17 09:58 ?0次下載
    具有八進(jìn)制反相<b class='flag-5'>緩沖區(qū)</b>的掃描測(cè)試設(shè)備<b class='flag-5'>數(shù)據(jù)</b>表

    Stm32采用環(huán)形緩沖區(qū)接收rk3588的數(shù)據(jù)代碼

    Stm32采用環(huán)形緩沖區(qū)接收rk3588的數(shù)據(jù)代碼
    的頭像 發(fā)表于 05-15 10:10 ?430次閱讀

    交換機(jī)與路由器緩沖區(qū):尋找完美大小

    *本文系SDNLAB編譯自瞻博網(wǎng)絡(luò)技術(shù)專(zhuān)家兼高級(jí)工程總監(jiān)Sharada Yeluri領(lǐng)英 在路由器和交換機(jī)中,緩沖區(qū)至關(guān)重要,可以防止網(wǎng)絡(luò)擁塞期間的數(shù)據(jù)丟失。緩沖區(qū)到底要多大?這個(gè)問(wèn)題在
    的頭像 發(fā)表于 04-11 16:56 ?899次閱讀
    交換機(jī)與路由器<b class='flag-5'>緩沖區(qū)</b>:尋找完美大小

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

    交換芯片緩沖區(qū)大小并不一定是固定的。緩沖區(qū)的設(shè)計(jì)和實(shí)現(xiàn)會(huì)根據(jù)芯片的具體型號(hào)、規(guī)格以及應(yīng)用場(chǎng)景的不同而有所差異。一些交換芯片可能具有固定大小的緩沖區(qū),以滿(mǎn)足特定的性能需求或成本限制。然而,隨著技術(shù)
    的頭像 發(fā)表于 03-18 14:42 ?452次閱讀

    使用UART FIFO緩沖區(qū)時(shí),緩沖區(qū)中的數(shù)據(jù)有時(shí)會(huì)損壞的原因?

    我在使用 UART FIFO 緩沖區(qū)時(shí)遇到了以下問(wèn)題。 問(wèn)題描述: 當(dāng)通過(guò)兩個(gè) UART 通道使用完整的 UART FIFO 緩沖區(qū)并通過(guò)兩個(gè)通道進(jìn)行通信時(shí),緩沖區(qū)中的數(shù)據(jù)有時(shí)會(huì)損壞,
    發(fā)表于 03-06 06:59

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

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

    使用malloc建立緩沖區(qū)時(shí)出現(xiàn)錯(cuò)誤怎么解決?

    ,我不知道現(xiàn)在這個(gè)已知系統(tǒng)的中斷頻率,所以我做了一個(gè)偷懶的想法,先把輸入數(shù)據(jù)3秒的數(shù)據(jù)放在自建的緩沖區(qū),再將這個(gè)數(shù)據(jù)處理后再輸出,延時(shí)大概3s數(shù)據(jù)
    發(fā)表于 11-30 07:39

    操作系統(tǒng)不同的緩沖區(qū)概念

    常常聽(tīng)到有程序員會(huì)跟你討論:“我們?cè)谧x寫(xiě)文件的時(shí)候,系統(tǒng)是有緩存的”。但實(shí)際上有一部分人把用戶(hù)進(jìn)程緩存區(qū)和系統(tǒng)空間緩存區(qū)的概念混淆了,包括這兩種緩沖區(qū)的用法和所要解決的問(wèn)題,還有其它類(lèi)似的概念。本文
    的頭像 發(fā)表于 11-10 10:38 ?1143次閱讀
    操作系統(tǒng)不同的<b class='flag-5'>緩沖區(qū)</b>概念

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

    Buffer) 環(huán)形緩沖區(qū)(Circular Buffer),也被稱(chēng)為循環(huán)緩沖區(qū)(Cyclic Buffer)或者環(huán)形隊(duì)列(Ring Buffer),是一種
    的頭像 發(fā)表于 11-09 11:21 ?1593次閱讀
    C++<b class='flag-5'>環(huán)形</b><b class='flag-5'>緩沖區(qū)</b>設(shè)計(jì)與實(shí)現(xiàn)