在通信程序中,經常使用環形緩沖區作為數據結構來存放通信中發送和接收的數據。環形緩沖區是一個先進先出的循環緩沖區,可以向通信程序提供對緩沖區的互斥訪問。
環形緩沖區的實現原理
環形緩沖區通常有一個讀指針和一個寫指針。讀指針指向環形緩沖區中可讀的數據,寫指針指向環形緩沖區中可寫的緩沖區。通過移動讀指針和寫指針就可以實現緩沖區的數據讀取和寫入。在通常情況下,環形緩沖區的讀用戶僅僅會影響讀指針,而寫用戶僅僅會影響寫指針。如果僅僅有一個讀用戶和一個寫用戶,那么不需要添加互斥保護機制就可以保證數據的正確性。如果有多個讀寫用戶訪問環形緩沖區,那么必須添加互斥保護機制來確保多個用戶互斥訪問環形緩沖區。
圖1、圖2和圖3是一個環形緩沖區的運行示意圖。圖1是環形緩沖區的初始狀態,可以看到讀指針和寫指針都指向第一個緩沖區處;圖2是向環形緩沖區中添加了一個數據后的情況,可以看到寫指針已經移動到數據塊2的位置,而讀指針沒有移動;圖3是環形緩沖區進行了讀取和添加后的狀態,可以看到環形緩沖區中已經添加了兩個數據,已經讀取了一個數據。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
通信程序
+關注
關注
0文章
14瀏覽量
8679 -
數據結構
+關注
關注
3文章
573瀏覽量
41529 -
環形緩沖
+關注
關注
0文章
3瀏覽量
1598
發布評論請先 登錄
相關推薦
熱點推薦
FreeRTOS進階使用之流緩沖區:高效處理字節流的秘密武器
解析其原理、特點、使用方法及注意事項,助你進階掌握這一關鍵技術。
一、流緩沖區是什么?為什么需要它?
流緩沖區是FreeRTOS中基于環形緩沖區實現
發表于 03-24 11:37
STM32進階之串口環形緩沖區實現
完了數據,‘0’地址空間的數據進行釋放掉,列隊頭指向下一個可以處理數據的地址‘1’。從而實現整個環形緩沖區的數據讀寫。看圖,隊列頭就是指向已經存儲的數據,并且這個數據是待處理的。下一個CPU處理的數據
發表于 06-08 14:03
MCU進階之串口環形緩沖區實現
是列隊頭的數據,處理完了數據,‘0’地址空間的數據進行釋放掉,列隊頭指向下一個可以處理數據的地址‘1’。從而實現整個環形緩沖區的數據讀寫。看圖,隊列頭就是指向已經存儲的數據,并且這個數據是待處理的。下一個
發表于 08-17 13:11
STM32串口環形緩沖區的實現
是列隊頭的數據,處理完了數據,‘0’地址空間的數據進行釋放掉,列隊頭指向下一個可以處理數據的地址‘1’。從而實現整個環形緩沖區的數據讀寫。看圖,隊列頭就是指向已經存儲的數據,并且這個數據是待處理
發表于 10-16 11:40
STM32進階之串口環形緩沖區實現資料下載
電子發燒友網為你提供STM32進階之串口環形緩沖區實現資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
發表于 04-20 08:46
?14次下載
[嵌入式開發模塊]單片機串口模塊:串口+定時器+環形緩沖區 實現無串口IDLE中斷接收不定長串口數據
前言本周看了些代碼模塊化和代碼框架抽象分層的知識,現在嘗試將手里代碼重新整理成模塊,方便以后業務開發。現在摸索了兩天,在網上看了些別人的文章和代碼,初步整理好了第一版(2019.12.6)。MCU: 華大的MCU HC32F030K8TA,其內核是Cortex-M0+,8KRAM,64KROM。編程環境:keil5模塊分析介紹這款MCU的性能一般,功能較少,目前想要讓其外接一個通信模塊...
發表于 11-06 11:21
?10次下載
STM32進階之串口環形緩沖區實現
在此之前,我們來回顧一下隊列的基本概念:隊列 (Queue):是一種先進先出(First In First Out ,簡稱 FIFO)的線性表,只允許在一端插入(入隊),在另一端進行刪除(出隊)。
發表于 02-09 11:58
?7次下載
STM32進階之串口環形緩沖區實現
碼代碼的應該學數據結構都學過隊列。環形隊列是隊列的一種特殊形式,應用挺廣泛的。因為有太多文章關于這方面的內容,理論知識可以看別人的,下面寫得挺好的:STM32進階之串口環形緩沖區實現
發表于 12-06 10:00
?3817次閱讀
環形緩沖區的實現思路
單片機程序開發一般都會用到UART串口通信,通過通信來實現上位機和單片機程序的數據交互。通信中為了實現正常的收發,一般都會有對應的發送和接收緩存來暫存通信數據。這里使用環形緩沖區的方式
環形緩沖區的實現原理
評論