最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

如何創(chuàng)建環(huán)形緩存(C語言實(shí)現(xiàn))

2021-06-24 08:46 作者:GXTon_阿通  | 我要投稿

在什么情況下用到環(huán)形緩存

如何創(chuàng)建環(huán)形的緩存

舉例說明,環(huán)形緩存的指針管理

環(huán)形緩存的問題

什么情況下用到環(huán)形緩存,

比如:用串口,或者其他通信方式接收數(shù)據(jù)的時(shí)候,可以用環(huán)形緩存.

因?yàn)橛芯o急的事情要處理,所以先把數(shù)據(jù)放入到環(huán)形緩存中,然后再從環(huán)形緩存中挑選出合格的一幀數(shù)據(jù).

比如:編寫一個(gè)鍵盤程序,有多個(gè)按鍵幾乎同時(shí)按下,為了有序的響應(yīng)所有按鍵.

可以把那一時(shí)刻按下的所有按鍵標(biāo)號都記錄在環(huán)形緩存中.

如何創(chuàng)建環(huán)形緩存,

可以創(chuàng)建一個(gè)數(shù)組,這個(gè)數(shù)組用于存儲數(shù)據(jù),也就是緩存了.

然后創(chuàng)建兩個(gè)全局的變量,一個(gè)變量充當(dāng)"寫指針"?pw,? 另一個(gè)變量充當(dāng)"讀指針"pr.

這兩個(gè)"指針"其實(shí)并不是真正的指針,只是記錄數(shù)據(jù)的變量.

這樣就可以實(shí)現(xiàn)一個(gè)環(huán)形的緩存了.

比如單片機(jī)中是在5ms中斷里面進(jìn)行輪詢檢測按鍵是否按下的.

每5ms有若干個(gè)按鍵被按下,那么就把這若干個(gè)按鍵號填充在環(huán)形緩存里面.

并移動響應(yīng)的寫指針pw,有3個(gè)按鍵按下,就pw+3;?有5個(gè)按鍵按下,pw+5;

當(dāng)程序跳出中斷,進(jìn)入到主循環(huán)中,進(jìn)行緩存數(shù)據(jù)的處理時(shí),

每次讀取緩存中的一個(gè)數(shù)據(jù)pr就會執(zhí)行?pr--;

直到pw=pr,也就是?寫指針=讀指針 的時(shí)候.這個(gè)時(shí)候說明緩存是空的.

然后再等待下一次中斷的到來...循環(huán)進(jìn)行...

舉例說明,

填充環(huán)形緩存:

計(jì)算環(huán)形緩存中包含的數(shù)據(jù)長度:(BufLong)

這里可能比較繞,它分為兩種情況,

一種情況是,pw>pr,就是寫指針大于讀指針的情況,這里循環(huán)緩存里的數(shù)據(jù)就是pw和pr之間的數(shù)據(jù),就是pw-pr.

另一種情況比較復(fù)雜,就是pw逐漸計(jì)數(shù),靠近了數(shù)組的邊界pw變成最大,也就是循環(huán)緩存的尾部,如果再有數(shù)據(jù)進(jìn)來pw就會變成0,然后從頭開始重新計(jì)數(shù),pw會從0開始從頭計(jì)數(shù).這樣就可能會出現(xiàn)pw<pr.

讀取環(huán)形緩存中的數(shù)據(jù):

環(huán)形緩存存在的問題,

環(huán)形緩存因?yàn)槭茄h(huán)計(jì)數(shù)的,如果數(shù)據(jù)太長,占滿了整個(gè)緩存,就會從頭開始計(jì)數(shù),

這個(gè)時(shí)候就會覆蓋前面的數(shù)據(jù),所以循環(huán)緩存需要設(shè)置合適的大小.

還有一個(gè)問題是,循環(huán)緩存的讀寫指針是全局變量,在操作的時(shí)候要考慮會不會有意外的中斷進(jìn)行改寫.防止指針意外變動.

如何創(chuàng)建環(huán)形緩存(C語言實(shí)現(xiàn))的評論 (共 條)

分享到微博請遵守國家法律
承德县| 特克斯县| 新巴尔虎左旗| 芒康县| 汝南县| 遂溪县| 乌恰县| 荣成市| 寿光市| 玛沁县| 普陀区| 平遥县| 昌江| 大同县| 江都市| 和顺县| 罗城| 忻城县| 锦州市| 无为县| 称多县| 海口市| 合山市| 观塘区| 肥乡县| 东海县| 宾阳县| 句容市| 弥渡县| 东乌珠穆沁旗| 册亨县| 绥滨县| 玉山县| 云南省| 普洱| 如皋市| 年辖:市辖区| 长治市| 襄汾县| 云和县| 洪雅县|