5.2.1. cbuf
circular_buf,循环buf,主要用于数据流的输入输出缓冲管理,具有如下特点:
buf 空间大小固定;
数据先进先出;
buf 开始和结束头尾相连的,在写到 buf 结束会从 buf 开始位置继续写入,形成环形结构;
数据可以多次写入一次读出或者一次写入多次读出;
无碎片产生问题;
适合用于数据流读写动态平衡的应用。
5.2.1.1. cbuf_init
函数原型:
void cbuf_init(cbuffer_t *cbuffer, void *buf, u32 size);
功能说明:在使用 cbuf 前初始化;
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
buf
需要管理的 buf 空间
size
需要管理的 buf 空间大小,单位 byte
返回值:无
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 cbuf_init(&cbuf_hdl, cbuf, sizeof(cbuf)); 6}
5.2.1.2. cbuf_write
函数原型:
u32 cbuf_write(cbuffer_t *cbuffer, void *buf, u32 size);
功能说明:把 buf 里的数据写到 cbuf;
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
buf
存放写入数据的 buf
size
需要写入数据的长度, 单位 byte
返回值:
u32
实际写入的长度
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100]; 6 u32 ret = 0; 7 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 8 //cbuf 写入 9 memset(wbuf, 0x5A, sizeof(wbuf)); 10 ret = cbuf_write(cbuf_hdl, wbuf, sizeof(wbuf)); 11 printf("cbuf_write ret = %d", ret); 12}
5.2.1.3. cbuf_read
函数原型:
u32 cbuf_read(cbuffer_t *cbuffer, void *buf, u32 size);
功能说明:读取 cbuf 里的数据到 buf;
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
buf
存放读取数据的 buf
size
需要读取数据的长度, 单位 byte
返回值:
u32
实际读取的长度
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100] = {0}; 6 u8 rbuf[100] = {0}; 7 u32 ret = 0; 8 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 9 //cbuf 写入 10 memset(wbuf, 0x5A, sizeof(wbuf)); 11 ret = cbuf_write(cbuf_hdl, wbuf, sizeof(wbuf)); 12 printf("cbuf_write ret = %d", ret); 13 if (ret > 0) { 14 //cbuf 读出 15 ret = cbuf_read(cbuf_hdl, rbuf, sizeof(rbuf)); 16 printf("cbuf_read ret = %d", ret); 17 } 18}
5.2.1.4. cbuf_is_write_able
函数原型:
u32 cbuf_is_write_able(cbuffer_t *cbuffer, u32 len);
功能说明:判断 cbuf 是否可以写入长度为 len 的数据
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
len
需要写入数据的长度, 单位 byte
返回值:
0
cbuf 剩余长度小于 len;
> 0
cbuf 剩余长度大于 len;
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100] = {0}; 6 u8 rbuf[100] = {0}; 7 u32 ret = 0; 8 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 9 //cbuf 写入 10 11 cbuf_write(cbuf_hdl, wbuf, sizeof(wbuf)); 12 ret = cbuf_is_write_able(cbuf_hdl, sizeof(wbuf)); 13 printf("cbuf_is_write_able ret = %d", ret); 14}
5.2.1.5. cbuf_write_alloc
函数原型:
void *cbuf_write_alloc(cbuffer_t *cbuffer, u32 *len);
功能说明:从 cbuf 获取写入长度为 len 数据的 buf 指针
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
len
需要写入数据的长度, 返回实际申请到的写入 buf 大小,单位 byte
返回值:
void *
申请到需要写入数据的 buf 指针
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u32 ret = 0; 6 u8 *wptr = NULL; 7 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 8 wptr = cbuf_write_alloc(cbuf_hdl, 100); 9}
5.2.1.6. cbuf_write_updata
函数原型:
void cbuf_write_updata(cbuffer_t *cbuffer, u32 len);
功能说明:更新 cbuf 写指针, 与 cbuf_write_alloc 匹配使用
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
len
写入数据的长度,单位 byte
返回值:无
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u32 ret = 0; 6 u8 *wptr = NULL; 7 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 8 wptr = cbuf_write_alloc(cbuf_hdl, 100); 9 //cbuf 写入 10 memset(wptr, 0x5A, 100); 11 cbuf_write_updata(cbuf_hdl, 100); 12}
5.2.1.7. cbuf_read_alloc
函数原型:
void *cbuf_read_alloc(cbuffer_t *cbuffer, u32 *len);
功能说明:从 cbuf 获取读取长度为 len 数据的 buf 指针
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
len
需要读取数据的长度, 返回实际申请到的读取 buf 大小,单位 byte
返回值:
void *
申请到需要读取数据的 buf 指针
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100] = {0}; 6 u32 ret = 0; 7 u8 *rptr = NULL; 8 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 9 //cbuf 写入 10 memset(wbuf, 0x5A, 100); 11 cbuf_write(cbuf_hdl, wbuf, sizeof(wbuf)); 12 rptr = cbuf_read_alloc(cbuf_hdl, 100); 13}
5.2.1.8. cbuf_read_updata
函数原型:
void cbuf_read_updata(cbuffer_t *cbuffer, u32 len);
功能说明:更新 cbuf 读指针, 与 cbuf_read_alloc 匹配使用
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
len
读取数据的长度,单位 byte
返回值:无
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100] = {0}; 6 u32 ret = 0; 7 u8 *rptr = NULL; 8 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 9 //cbuf 写入 10 memset(wbuf, 0x5A, 100); 11 cbuf_write(cbuf_hdl, wbuf, sizeof(wbuf)); 12 rptr = cbuf_read_alloc(cbuf_hdl, 100); 13 cbuf_read_updata(cbuf_hdl, 100); 14}
5.2.1.9. cbuf_clear
函数原型:
void cbuf_clear(cbuffer_t *cbuffer);
功能说明:清除 cbuf 中所有数据
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
返回值:无
示例:
1cbuffer_t cbuf_hdl = {0}; 2 3int cbuf[512] = {0}; 4void cbuf_user_demo() 5{ 6 u8 wbuf[100]; 7 u32 ret = 0; 8 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 9 //cbuf 写入 10 memset(wbuf, 0x5A, sizeof(wbuf)); 11 ret = cbuf_write(cbuf_hdl, wbuf, sizeof(wbuf)); 12 printf("cbuf_write ret = %d", ret); 13 cbuf_clear(cbuf_hdl); 14}
5.2.1.10. cbuf_rewrite
函数原型:
u32 cbuf_rewrite(cbuffer_t *cbuffer, void *begin, void *buf, u32 len);
功能说明:重写 cbuf 中指定位置的数据
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
begin
重写数据的 buf 地址
buf
写入buf数据
len
重写数据长度
返回值:
u32
实际重写的数据大小
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u32 ret = 0; 6 u8 wbuf[50] = {0}; 7 u8 *wptr = NULL; 8 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 9 wptr = cbuf_write_alloc(cbuf_hdl, 100); 10 //cbuf 写入 11 memset(wptr, 0x5A, 100); 12 cbuf_write_updata(cbuf_hdl, 100); 13 memset(wbuf, 0xA5, sizeof(wbuf)); 14 cbuf_rewrite(cbuf_hdl, wptr, wbuf,sizeof(wbuf)) 15}
5.2.1.11. cbuf_prewrite
函数原型:
void cbuf_updata_prewrite(cbuffer_t *cbuffer);
功能说明:更新预写信息
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
返回值: 无
示例:
1
5.2.1.12. cbuf_updata_prewrite
函数原型:
u32 cbuf_prewrite(cbuffer_t *cbuffer, void *buf, u32 len);
功能说明:把 buf 数据写入, 但是不更新写指针,预写
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
buf
存放写入数据的 buf
size
需要写入数据的长度,单位 byte
返回值:
u32
实际写入的数据大小
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100]; 6 u32 ret = 0; 7 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 8 //cbuf 写入 9 memset(wbuf, 0x5A, sizeof(wbuf)); 10 ret = cbuf_prewrite(cbuf_hdl, wbuf, sizeof(wbuf)); 11 printf("cbuf_write ret = %d", ret); 12 cbuf_updata_prewrite(cbuf_hdl); 13}
5.2.1.13. cbuf_discard_prewrite
函数原型:
void cbuf_discard_prewrite(cbuffer_t *cbuffer);
功能说明:取消预写信息
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
返回值:无
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100]; 6 u32 ret = 0; 7 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 8 //cbuf 写入 9 memset(wbuf, 0x5A, sizeof(wbuf)); 10 ret = cbuf_prewrite(cbuf_hdl, wbuf, sizeof(wbuf)); 11 printf("cbuf_write ret = %d", ret); 12 cbuf_discard_prewrite(cbuf_hdl); 13}
5.2.1.14. cbuf_get_writeptr
函数原型:
void *cbuf_get_writeptr(cbuffer_t *cbuffer);
功能说明:获取 cbuf 写指针
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
返回值:
参数
说明
void *
当前 cbuf 写指针
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100]; 6 u32 ret = 0; 7 u8 *wptr = NULL; 8 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 9 //cbuf 写入 10 memset(wbuf, 0x5A, sizeof(wbuf)); 11 ret = cbuf_write(cbuf_hdl, wbuf, sizeof(wbuf)); 12 printf("cbuf_write ret = %d", ret); 13 wptr = cbuf_get_writeptr(cbuf_hdl) 14}
5.2.1.15. cbuf_get_readptr
函数原型:
void *cbuf_get_readptr(cbuffer_t *cbuffer);
功能说明:获取 cbuf 读指针
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
返回值:
参数
说明
void *
当前 cbuf 读指针
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100]; 6 u32 ret = 0; 7 u8 *rptr = NULL; 8 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 9 //cbuf 写入 10 memset(wbuf, 0x5A, sizeof(wbuf)); 11 ret = cbuf_write(cbuf_hdl, wbuf, sizeof(wbuf)); 12 printf("cbuf_write ret = %d", ret); 13 rptr = cbuf_get_readptr(cbuf_hdl) 14}
5.2.1.16. cbuf_get_data_size
函数原型:
u32 cbuf_get_data_size(cbuffer_t *cbuffer)
功能说明:获取 cbuf 读指针
参数说明:
参数
说明
cbuffer
用于管理 cbuffer 的句柄指针
返回值:
参数
说明
u32
获取 cbuf 中可读数据长度
示例:
1cbuffer_t cbuf_hdl = {0}; 2int cbuf[512] = {0}; 3void cbuf_user_demo() 4{ 5 u8 wbuf[100]; 6 u32 ret = 0; 7 u8 *rptr = NULL; 8 cbuf_init(cbuf_hdl, cbuf, sizeof(cbuf)); 9 //cbuf 写入 10 memset(wbuf, 0x5A, sizeof(wbuf)); 11 ret = cbuf_write(cbuf_hdl, wbuf, sizeof(wbuf)); 12 printf("cbuf_write ret = %d", ret); 13 ret = cbuf_get_data_size(cbuf_hdl); 14 printf("cbuf data size = %d", ret); 15}