除了基本的讀寫操作之外,為了更好的利用環形這一特點,我加入了分隔關鍵詞、查詢關鍵詞、刪除數據等功能
基于這些功能您可以在串口收發中實現多段數據的緩存與準確讀。唤档土藢崟r性響應的要求、提升了串口收發的性能
- #include <stdio.h>
- #include <ring_buffer.h>
- #define Read_BUFFER_SIZE 256
- //設定一個分隔關鍵詞和關鍵詞的長度(字節)
- #define SEPARATE_SIGN 0xCCFB22AA
- #define SEPARATE_SIGN_SIZE 4
- int main()
- {
- //新建緩沖區數組與Ring Buff操作句柄
- uint8_t buffer[Read_BUFFER_SIZE] ;
- ring_buffer RB ;
- //初始化Ring Buff操作句柄,綁定緩沖區數組;
- Ring_Buffer_Init(&RB, buffer, Read_BUFFER_SIZE);
- //記錄段落數量
- uint8_t String_Count = 0 ;
- //向環形緩沖區寫入三段數據,每段之間插入一個分隔關鍵詞
- Ring_Buffer_Write_String(&RB, "ABCDEFGHIJK\r\n", 13);//寫入一段數據
- Ring_Buffer_Insert_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE);//插入一個分隔關鍵詞
- String_Count ++ ;//記錄段落數量 +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] ;
- //獲得頭指針到關鍵詞高位的距離,距離-1得到第一段數據的長度
- uint8_t lenght = Ring_Buffer_Find_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE) - 1 ;
- Ring_Buffer_Read_String(&RB, get, lenght);//讀取一段數據,保存到get數組
- printf("%s", get);//打印數據
- Ring_Buffer_Delete(&RB, SEPARATE_SIGN_SIZE);//刪除分隔關鍵詞的長度的數據,即刪除關鍵詞
- String_Count -- ;//記錄段落數量 -1
- }
- return 0 ;
- }
復制代碼 |