Skip to content

Commit e8d92aa

Browse files
committed
修改RBC的初始化参数数据类型
1 parent c4c66f2 commit e8d92aa

5 files changed

+104
-44
lines changed

Readme.md

+93-35
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,108 @@
22
[![GitHub repository](https://img.shields.io/badge/github-RingBuffer-blue)](https://github.com/netube99/RingBuffer) [![GitHub license](https://img.shields.io/github/license/netube99/RingBuffer?color=green)](https://github.com/netube99/RingBuffer/blob/main/LICENSE) [![Language](https://img.shields.io/badge/make%20with-C-red)]()
33

44
## 简介
5-
RingBuffer 是一个基于C语言开发的轻量级环形缓冲区,适用于各嵌入式平台的串口收发等应用场景;库文件提供了基础的环形数据读写功能,为了方便多组数据同时储存,RingBuffer提供了一个可选的分段记录功能;代码在GD32F130C8T6平台上编译运行,已进行过大量数据的串口收发压力测试,暂未发现显性BUG但不保证稳定性,用于产品开发的话请务必谨慎测试,如果发现BUG请及时反馈,谢谢;
5+
RingBuffer 是一个基于C语言开发的轻量级环形缓冲区,适用于各嵌入式平台的串口收发等应用场景;在基本功能的基础上还提供了一个分段记录框架,使得数据管理更加方便;代码在AT32F403A平台上编译运行,经过简单的串口收发测试后暂未发现显性BUG但不保证稳定性,用于产品开发的话请务必谨慎测试,如果发现BUG请及时反馈,谢谢;
66

77
## 开始
8-
1. 复制库文件至工程中,在源代码中引用 RingBuffer 头文件;
9-
2. 新建一个 uint8_t 数组,数组的大小即是环形缓冲区的大小;
10-
3. 新建 RingBuffer 操作句柄;
11-
4. 初始化 RingBuffer 操作句柄,将其与刚才新建的数组空间绑定,转换成环形缓冲区;
12-
5. 使用库提供的各种函数对新建的缓冲区进行读写等操作;
13-
14-
## 示例
15-
RingBuffer 的基本的使用方法
8+
### 基础功能 RingBuffer Base 的使用方法
9+
1610
```c
11+
//引用相关头文件
12+
#include <stdint.h>
1713
#include <stdio.h>
18-
#include <ring_buffer.h>
14+
#include "ring_buffer.h"
15+
16+
//创建一个数组作为数据存储空间
17+
#define BUFFER_SIZE 128
18+
static uint8_t buffer[BUFFER_SIZE];
1919

20-
#define READ_BUFFER_SIZE 256
20+
//创建环形缓冲区句柄
21+
static ring_buffer rb;
2122

22-
int main()
23+
int main(void)
2324
{
24-
//新建缓冲区数组与RingBuffer操作句柄
25-
uint8_t buffer[READ_BUFFER_SIZE] ;
26-
ring_buffer RB ;
27-
28-
//初始化RingBuffer操作句柄,绑定缓冲区数组;
29-
RB_Init(&RB, buffer, READ_BUFFER_SIZE);
30-
31-
//向环形缓冲区写入一段字节和一个字节
32-
RB_Write_String(&RB, "hello world", 11);
33-
RB_Write_Byte(&RB, '!');
34-
35-
//获取已储存的数据长度,读出环形缓冲区中的数据并打印
36-
uint32_t num = RB_Get_Length(&RB);
37-
uint8_t get[16] ;
38-
RB_Read_String(&RB, get, num);
25+
//初始化环形缓冲区参数
26+
RB_Init(&rb, buffer, BUFFER_SIZE);
27+
28+
//写入向环形缓冲区写入数据
29+
RB_Write_String(&rb, "hello world", 11);
30+
RB_Write_Byte(&rb, '!');
31+
RB_Write_Byte(&rb, 0x00);
32+
33+
//删除环形缓冲区部分数据
34+
RB_Delete(&rb, 2);
35+
36+
//获取已储存的数据长度
37+
uint32_t num = RB_Get_Length(&rb);
38+
39+
//读出环形缓冲区中的数据并打印
40+
uint8_t get[16];
41+
RB_Read_String(&rb, get, num);
3942
printf("%s", get);
4043

41-
return 0 ;
44+
//控制台输出内容
45+
//llo world!
46+
return 0;
47+
}
48+
```
49+
### 分段框架 RingBuffer Chapter 的使用方法
50+
51+
```c
52+
//引用相关头文件
53+
#include <stdint.h>
54+
#include <stdio.h>
55+
#include "ring_buffer_chapter.h"
56+
57+
//创建两个数组,一个作为数据存储空间,一个用于记录分段信息
58+
#define BASE_SIZE 128
59+
static uint8_t buffer_base[BASE_SIZE];
60+
#define CHAPTER_SIZE 16
61+
static uint32_t buffer_chapter[CHAPTER_SIZE];
62+
63+
//创建分段环形缓冲区句柄
64+
static ring_buffer_chapter rbc;
65+
66+
int main(void)
67+
{
68+
//初始化分段环形缓冲区参数
69+
RBC_Init(&rbc, buffer_base, BASE_SIZE, buffer_chapter, CHAPTER_SIZE);
70+
71+
//写入向环形缓冲区写入数据1,并记录分段结尾
72+
RBC_Write_String(&rbc, "string1", 7);
73+
RBC_Write_Byte(&rbc, '!');
74+
RBC_Write_Byte(&rbc, 0x00);
75+
RBC_Ending_Chapter(&rbc);
76+
77+
//写入向环形缓冲区写入数据2,并记录分段结尾
78+
RBC_Write_String(&rbc, "string2", 7);
79+
RBC_Write_Byte(&rbc, '!');
80+
RBC_Write_Byte(&rbc, 0x00);
81+
RBC_Ending_Chapter(&rbc);
82+
83+
//获取已储存的分段数量
84+
uint32_t num = RBC_Get_Chapter_Number(&rbc);
85+
86+
//读出环形缓冲区中的数据并打印
87+
uint8_t get[16];
88+
for (uint32_t i = 0; i < num; i++)
89+
{
90+
RBC_Read_Chapter(&rbc, get, NULL);
91+
printf("%s\r\n", get);
92+
}
93+
94+
//控制台输出内容
95+
//string1!
96+
//string2!
97+
return 0;
4298
}
4399
```
100+
44101
## 更新
45-
2021.01.19 v1.0.0 发布第一版本<br>
46-
2021.01.24 v1.1.0 增加匹配字符查找函数<br>
47-
2021.01.27 v1.2.0 重制匹配字符查找函数,现已支持8位到32位关键词查询<br>
48-
2021.01.28 v1.3.0 复位函数修改为删除函数、增加关键词插入函数(自适应大小端)<br>
49-
2021.01.30 v1.3.1 修复了String读写函数的小概率指针溢出错误<br>
50-
2021.06.29 v1.3.2 修复了 RB_Write_String 的参数类型错误,修复了RB_Write_Byte 无法写数组最后一位的问题<br>
51-
2022.05.31 v1.4.0 删除了关键词插入/查询功能,并使用分段结束记录功能替换;修改函数RB_Read_Byte的输出方式<br>
102+
103+
2021.01.19 v0.1.0 第一版<br>
104+
2021.01.24 v0.1.0 增加匹配字符查找函数<br>
105+
2021.01.27 v0.2.0 重制匹配字符查找函数,现已支持8位到32位关键词查询<br>
106+
2021.01.28 v0.3.0 复位函数修改为删除函数、增加关键词插入函数(自适应大小端)<br>
107+
2021.01.30 v0.3.1 修复了String读写函数的小概率指针溢出错误<br>
108+
2021.06.29 v0.3.2 修复了 RB_Write_String 的参数类型错误,修复了RB_Write_Byte 无法写数组最后一位的问题<br>
109+
2022.08.20 v0.3.3 删除了关键词功能,使用分段结束记录功能替换;修改函数RB_Read_Byte的输出方式<br>2022.09.25 v0.4.0 删除旧版分段,重新开发分段记录框架功能<br>

ring_buffer.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
* \file ring_buffer.c
33
* \brief 简易环形缓冲的实现
44
* \author netube_99\[email protected]
5-
* \date 2021.08.20
6-
* \version v0.3.2
5+
* \date 2022.08.20
6+
* \version v0.4.0
77
*/
88

99
#include <stdint.h>

ring_buffer.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
* \file ring_buffer.h
33
* \brief 简易环形缓冲相关定义与声明
44
* \author netube_99\[email protected]
5-
* \date 2021.08.20
6-
* \version v0.3.2
5+
* \date 2022.08.20
6+
* \version v0.4.0
77
*/
88
#ifndef _RING_BUFFER_H_
99
#define _RING_BUFFER_H_

ring_buffer_chapter.c

+5-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* \brief 简易分段环形缓冲的实现
44
* \author netube_99\[email protected]
55
* \date 2022.09.25
6-
* \version v0.1
6+
* \version v0.4.0
77
*/
88

99
#include <stdint.h>
@@ -20,11 +20,13 @@
2020
* \arg RING_BUFFER_CHAPTER_SUCCESS: 初始化成功
2121
* \arg RING_BUFFER_CHAPTER_ERROR: 初始化失败
2222
*/
23-
uint8_t RBC_Init(ring_buffer_chapter *rbc_handle, uint8_t *base_buffer_addr, uint32_t base_buffer_size, uint8_t *chapter_buffer_addr, uint32_t chapter_buffer_size)
23+
uint8_t RBC_Init(ring_buffer_chapter *rbc_handle,\
24+
uint8_t *base_buffer_addr, uint32_t base_buffer_size,\
25+
uint32_t *chapter_buffer_addr, uint32_t chapter_buffer_size)
2426
{
2527
if(!RB_Init(&(rbc_handle->base_handle), base_buffer_addr, base_buffer_size))
2628
return RING_BUFFER_CHAPTER_ERROR ;
27-
if(!RB_Init(&(rbc_handle->chapter_handle), chapter_buffer_addr, chapter_buffer_size))
29+
if(!RB_Init(&(rbc_handle->chapter_handle), (uint8_t *)chapter_buffer_addr, chapter_buffer_size))
2830
return RING_BUFFER_CHAPTER_ERROR ;
2931
rbc_handle->head_chapter_length = 0 ;
3032
rbc_handle->tail_chapter_length = 0 ;

ring_buffer_chapter.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* \brief 简易分段环形缓冲相关定义与声明
44
* \author netube_99\[email protected]
55
* \date 2022.09.25
6-
* \version v0.1
6+
* \version v0.4.0
77
*/
88

99
#ifndef _RING_BUFFER_CHAPTER_H_
@@ -27,7 +27,7 @@ typedef struct
2727

2828
uint8_t RBC_Init(ring_buffer_chapter *rbc_handle,\
2929
uint8_t *base_buffer_addr, uint32_t base_buffer_size,\
30-
uint8_t *chapter_buffer_addr, uint32_t chapter_buffer_size); //初始化带分段功能的环形缓冲区
30+
uint32_t *chapter_buffer_addr, uint32_t chapter_buffer_size); //初始化带分段功能的环形缓冲区
3131
uint8_t RBC_Write_Byte(ring_buffer_chapter *rbc_handle, uint8_t data); //向尾分段里写一个字节
3232
uint8_t RBC_Write_String(ring_buffer_chapter *rbc_handle, uint8_t *input_addr, uint32_t write_Length); //向尾分段里写指定长度数据
3333
uint8_t RBC_Ending_Chapter(ring_buffer_chapter *rbc_handle); //分段结尾,完成一次分段记录

0 commit comments

Comments
 (0)