|
除了基本的讀寫操作之外,為了更好的利用環(huán)形這一特點(diǎn),我加入了分隔關(guān)鍵詞、查詢關(guān)鍵詞、刪除數(shù)據(jù)等功能
基于這些功能您可以在串口收發(fā)中實(shí)現(xiàn)多段數(shù)據(jù)的緩存與準(zhǔn)確讀取;降低了實(shí)時(shí)性響應(yīng)的要求、提升了串口收發(fā)的性能
- #include <stdio.h>
- #include <ring_buffer.h>
- #define Read_BUFFER_SIZE 256
- //設(shè)定一個(gè)分隔關(guān)鍵詞和關(guān)鍵詞的長(zhǎng)度(字節(jié))
- #define SEPARATE_SIGN 0xCCFB22AA
- #define SEPARATE_SIGN_SIZE 4
- int main()
- {
- //新建緩沖區(qū)數(shù)組與Ring Buff操作句柄
- uint8_t buffer[Read_BUFFER_SIZE] ;
- ring_buffer RB ;
- //初始化Ring Buff操作句柄,綁定緩沖區(qū)數(shù)組;
- Ring_Buffer_Init(&RB, buffer, Read_BUFFER_SIZE);
- //記錄段落數(shù)量
- uint8_t String_Count = 0 ;
- //向環(huán)形緩沖區(qū)寫入三段數(shù)據(jù),每段之間插入一個(gè)分隔關(guān)鍵詞
- Ring_Buffer_Write_String(&RB, "ABCDEFGHIJK\r\n", 13);//寫入一段數(shù)據(jù)
- Ring_Buffer_Insert_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE);//插入一個(gè)分隔關(guān)鍵詞
- String_Count ++ ;//記錄段落數(shù)量 +1
- Ring_Buffer_Write_String(&RB, "abcdefg\r\n", 9);
- Ring_Buffer_Insert_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE);
- String_Count ++ ;
- Ring_Buffer_Write_String(&RB, "1234\r\n", 6);
- Ring_Buffer_Insert_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE);
- String_Count ++ ;
- while(String_Count != 0)
- {
- uint8_t get[16] ;
- //獲得頭指針到關(guān)鍵詞高位的距離,距離-1得到第一段數(shù)據(jù)的長(zhǎng)度
- uint8_t lenght = Ring_Buffer_Find_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE) - 1 ;
- Ring_Buffer_Read_String(&RB, get, lenght);//讀取一段數(shù)據(jù),保存到get數(shù)組
- printf("%s", get);//打印數(shù)據(jù)
- Ring_Buffer_Delete(&RB, SEPARATE_SIGN_SIZE);//刪除分隔關(guān)鍵詞的長(zhǎng)度的數(shù)據(jù),即刪除關(guān)鍵詞
- String_Count -- ;//記錄段落數(shù)量 -1
- }
- return 0 ;
- }
復(fù)制代碼 |
|