緩沖區(qū)顧名思義是緩沖數(shù)據(jù)用的。實現(xiàn)緩沖區(qū)最簡單的辦法時,定義多個數(shù)組,接收一包數(shù)據(jù)到數(shù)組A,就把接收數(shù)據(jù)的地址換成數(shù)組B,每個數(shù)據(jù)有個標(biāo)記字節(jié)用于表示這個數(shù)組是否收到數(shù)據(jù),收到數(shù)據(jù)是否處理完成。
缺點:
①緩沖數(shù)據(jù)組數(shù)一定,且有多變量,代碼結(jié)構(gòu)不太清晰。
②接收數(shù)據(jù)長度可能大于數(shù)組大小,也可能小于數(shù)組大小。不靈活,需要接收數(shù)據(jù)很長時容易出錯,且內(nèi)存利用率低。
解決這個問題的好辦法是:環(huán)形緩沖區(qū)。
環(huán)形緩沖區(qū)簡介
環(huán)形緩沖區(qū)就是一個帶“頭指針”和“尾指針”的數(shù)組。在單片機(jī)中串口通信是我們使用最頻繁的,使用串口通信就會用到串口的數(shù)據(jù)接收與發(fā)送,環(huán)形緩沖區(qū)方式接收數(shù)據(jù)可以更好的保證數(shù)據(jù)丟幀率第。
在通信程序中,經(jīng)常使用環(huán)形緩沖器作為數(shù)據(jù)結(jié)構(gòu)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對緩沖區(qū)的互斥訪問。
環(huán)形緩沖區(qū)的一個有用特性是:當(dāng)一個數(shù)據(jù)元素被用掉后,其余數(shù)據(jù)元素不需要移動其存儲位置。相反,一個非圓形緩沖區(qū)(例如一個普通的隊列)在用掉一個數(shù)據(jù)元素后,其余數(shù)據(jù)元素需要向前搬移。換句話說,環(huán)形緩沖區(qū)適合實現(xiàn)先進(jìn)先出緩沖區(qū),而非環(huán)形緩沖區(qū)適合后進(jìn)先出緩沖區(qū)。
整合自:博客園、CSDN
編輯:jq
-
STM32
+關(guān)注
關(guān)注
2295文章
11032瀏覽量
365228
發(fā)布評論請先 登錄
如何清除CYUSB3014的緩沖區(qū)數(shù)據(jù)?USB接口數(shù)據(jù)什么時候發(fā)送到電腦?
請問USB緩沖區(qū)取數(shù)據(jù)可以多次取嗎?
【RA4L1-SENSOR】串口收發(fā) + 環(huán)形緩沖區(qū)
解析RZ/N2L CANFD模塊的緩沖區(qū)機(jī)制(2)

FX3 Socket緩沖區(qū)切換的最大時間是多少?
在傳輸DMA通道中的所有緩沖區(qū)后,DMA標(biāo)志(就緒和部分)被卡住了是怎么回事?
求助,關(guān)于3014的緩沖區(qū)設(shè)置疑問求解
請問如何在Linux中使用幀緩沖區(qū)更新epdc顯示?
FreeRTOS進(jìn)階使用之流緩沖區(qū):高效處理字節(jié)流的秘密武器
L9663如何使用上行緩沖區(qū)發(fā)送同步脈沖?
RTOS的流緩沖區(qū)機(jī)制解析

AMD Zen 4處理器悄然禁用循環(huán)緩沖區(qū)
分享一個嵌入式通用FIFO環(huán)形緩沖區(qū)實現(xiàn)庫

內(nèi)存緩沖區(qū)和內(nèi)存的關(guān)系
單片機(jī)中的幾種環(huán)形緩沖區(qū)的分析和實現(xiàn)

評論