在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結(jié)構(gòu)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對緩沖區(qū)的互斥訪問。
環(huán)形緩沖區(qū)的實現(xiàn)原理
環(huán)形緩沖區(qū)通常有一個讀指針和一個寫指針。讀指針指向環(huán)形緩沖區(qū)中可讀的數(shù)據(jù),寫指針指向環(huán)形緩沖區(qū)中可寫的緩沖區(qū)。通過移動讀指針和寫指針就可以實現(xiàn)緩沖區(qū)的數(shù)據(jù)讀取和寫入。在通常情況下,環(huán)形緩沖區(qū)的讀用戶僅僅會影響讀指針,而寫用戶僅僅會影響寫指針。如果僅僅有一個讀用戶和一個寫用戶,那么不需要添加互斥保護(hù)機(jī)制就可以保證數(shù)據(jù)的正確性。如果有多個讀寫用戶訪問環(huán)形緩沖區(qū),那么必須添加互斥保護(hù)機(jī)制來確保多個用戶互斥訪問環(huán)形緩沖區(qū)。
圖1、圖2和圖3是一個環(huán)形緩沖區(qū)的運(yùn)行示意圖。圖1是環(huán)形緩沖區(qū)的初始狀態(tài),可以看到讀指針和寫指針都指向第一個緩沖區(qū)處;圖2是向環(huán)形緩沖區(qū)中添加了一個數(shù)據(jù)后的情況,可以看到寫指針已經(jīng)移動到數(shù)據(jù)塊2的位置,而讀指針沒有移動;圖3是環(huán)形緩沖區(qū)進(jìn)行了讀取和添加后的狀態(tài),可以看到環(huán)形緩沖區(qū)中已經(jīng)添加了兩個數(shù)據(jù),已經(jīng)讀取了一個數(shù)據(jù)。
-
通信程序
+關(guān)注
關(guān)注
0文章
14瀏覽量
8600 -
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
40598 -
環(huán)形緩沖
+關(guān)注
關(guān)注
0文章
3瀏覽量
1556
發(fā)布評論請先 登錄
FreeRTOS進(jìn)階使用之流緩沖區(qū):高效處理字節(jié)流的秘密武器
STM32進(jìn)階之串口環(huán)形緩沖區(qū)實現(xiàn)
杰杰帶你解讀【機(jī)智云】環(huán)形緩沖區(qū)源碼
MCU進(jìn)階之串口環(huán)形緩沖區(qū)實現(xiàn)
STM32串口環(huán)形緩沖區(qū)的實現(xiàn)
請問串口DMA+環(huán)形緩沖區(qū)如何實現(xiàn)不定長度的數(shù)據(jù)收發(fā)?
STM32進(jìn)階之串口環(huán)形緩沖區(qū)實現(xiàn)資料下載

STM32進(jìn)階之串口環(huán)形緩沖區(qū)實現(xiàn)

STM32進(jìn)階之串口環(huán)形緩沖區(qū)實現(xiàn)
環(huán)形緩沖區(qū)的實現(xiàn)思路
C++環(huán)形緩沖區(qū)設(shè)計與實現(xiàn)

分享一個嵌入式通用FIFO環(huán)形緩沖區(qū)實現(xiàn)庫

評論