初级会员

- 积分
- 62
- 金钱
- 62
- 注册时间
- 2020-6-29
- 在线时间
- 12 小时
|

楼主 |
发表于 2021-1-30 12:10:09
|
显示全部楼层
除了基本的读写操作之外,为了更好的利用环形这一特点,我加入了分隔关键词、查询关键词、删除数据等功能
基于这些功能您可以在串口收发中实现多段数据的缓存与准确读取;降低了实时性响应的要求、提升了串口收发的性能
- #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 ;
- }
复制代码 |
|