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