緩沖區(qū)顧名思義是緩沖數(shù)據(jù)用的。實(shí)現(xiàn)緩沖區(qū)最簡單的辦法時(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ù)長度可能大于數(shù)組大小,也可能小于數(shù)組大小。不靈活,需要接收數(shù)據(jù)很長時(shí)容易出錯(cuò),且內(nèi)存利用率低。
解決這個(gè)問題的好辦法是:環(huán)形緩沖區(qū)。
環(huán)形緩沖區(qū)簡介
環(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)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個(gè)先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對緩沖區(qū)的互斥訪問。
環(huán)形緩沖區(qū)的一個(gè)有用特性是:當(dāng)一個(gè)數(shù)據(jù)元素被用掉后,其余數(shù)據(jù)元素不需要移動(dòng)其存儲(chǔ)位置。相反,一個(gè)非圓形緩沖區(qū)(例如一個(gè)普通的隊(duì)列)在用掉一個(gè)數(shù)據(jù)元素后,其余數(shù)據(jù)元素需要向前搬移。換句話說,環(huán)形緩沖區(qū)適合實(shí)現(xiàn)先進(jìn)先出緩沖區(qū),而非環(huán)形緩沖區(qū)適合后進(jìn)先出緩沖區(qū)。
整合自:博客園、CSDN
編輯:jq
-
STM32
+關(guān)注
關(guān)注
2309文章
11161瀏覽量
373371
發(fā)布評論請先 登錄
C語言的緩沖區(qū)(緩存)詳解
CW32L052串口的緩沖區(qū)機(jī)制
飛凌嵌入式ElfBoard-標(biāo)準(zhǔn)IO接口之設(shè)置緩沖區(qū)
移植的lvgl,在運(yùn)行的時(shí)候,緩沖區(qū)無法釋放怎么解決?
如何清除CYUSB3014的緩沖區(qū)數(shù)據(jù)?USB接口數(shù)據(jù)什么時(shí)候發(fā)送到電腦?
請問USB緩沖區(qū)取數(shù)據(jù)可以多次取嗎?
【RA4L1-SENSOR】串口收發(fā) + 環(huán)形緩沖區(qū)
解析RZ/N2L CANFD模塊的緩沖區(qū)機(jī)制(2)
解析RZ/N2L CANFD模塊的緩沖區(qū)機(jī)制(1)
緩沖區(qū)是啥意思 STM32串口數(shù)據(jù)接收之環(huán)形緩沖區(qū)
評論