环形块状缓冲区接口
更多...
|
void | rt_rbb_init (rt_rbb_t rbb, rt_uint8_t *buf, rt_size_t buf_size, rt_rbb_blk_t block_set, rt_size_t blk_max_num) |
| 环形块状缓冲区对象(rbb)初始化 更多...
|
|
rt_rbb_t | rt_rbb_create (rt_size_t buf_size, rt_size_t blk_max_num) |
| 创建环形块状缓冲区(rbb)对象 更多...
|
|
void | rt_rbb_destroy (rt_rbb_t rbb) |
| 销毁环形块状缓冲区(rbb)对象 更多...
|
|
rt_size_t | rt_rbb_get_buf_size (rt_rbb_t rbb) |
| 获取环形块状缓冲区(rbb)中的缓冲区 更多...
|
|
rt_rbb_blk_t | rt_rbb_blk_alloc (rt_rbb_t rbb, rt_size_t blk_size) |
| 从 rbb 中分一个块,当分配成功后,这个块将会加入到 blk_list 中 更多...
|
|
void | rt_rbb_blk_put (rt_rbb_blk_t block) |
| 将一个块放入到 rbb 中 更多...
|
|
rt_rbb_blk_t | rt_rbb_blk_get (rt_rbb_t rbb) |
| 从 rbb 中取出一个块 更多...
|
|
void | rt_rbb_blk_free (rt_rbb_t rbb, rt_rbb_blk_t block) |
| 释放一个块 更多...
|
|
rt_size_t | rt_rbb_blk_queue_get (rt_rbb_t rbb, rt_size_t queue_data_len, rt_rbb_blk_queue_t blk_queue) |
| 获取块队列,块队列中的块缓冲区地址连续 更多...
|
|
rt_size_t | rt_rbb_blk_queue_len (rt_rbb_blk_queue_t blk_queue) |
| 获取块队列的数据长度 更多...
|
|
rt_uint8_t * | rt_rbb_blk_queue_buf (rt_rbb_blk_queue_t blk_queue) |
| 返回块队列的缓冲区 更多...
|
|
void | rt_rbb_blk_queue_free (rt_rbb_t rbb, rt_rbb_blk_queue_t blk_queue) |
| 释放块队列 更多...
|
|
rt_size_t | rt_rbb_next_blk_queue_len (rt_rbb_t rbb) |
| 处于 put 状态并且是连续的块,可以组成块队列。 这个方法将会返回下一个可以组成块队列的总长度。 更多...
|
|
环形块状缓冲区接口
环形块状缓冲区简称为:rbb。与传统的环形缓冲区不同的是,rbb 是一个由很多不定长度的块组成的环形缓冲区,而传统的环形缓冲区是由很多个单字节的 char 组成。
rbb 支持 零字节拷贝 。所以 rbb 非常适合用于生产者顺序 put 数据块,消费者顺序 get 数据块的场景,例如:DMA 传输,通信帧的接收与发送等等
rbb 中的块状态
枚举值 |
---|
RT_RBB_BLK_UNUSED |
未使用状态,当初始化完成或调用 blk_free() 之后的状态
|
RT_RBB_BLK_INITED |
初始化状态,调用了 blk_alloc() 后的状态
|
RT_RBB_BLK_PUT |
put 状态,调用了 blk_put() 后的状态
|
RT_RBB_BLK_GET |
get 状态,调用了 blk_get() 后的状态
|
环形块状缓冲区对象(rbb)初始化
- 参数
-
rbb | 环形块状缓冲区对象 |
buf | 其内部所需的缓冲区 |
buf_size | 缓冲区的大小 |
block_set | 块的集合 |
blk_max_num | 块的最大数量 |
- 注解
- 当应用需要对齐访问 rbb 时,务必保证传入的 buf 地址已对齐。
创建环形块状缓冲区(rbb)对象
- 参数
-
buf_size | 其内部所需的缓冲区大小 |
blk_max_num | 块的最大数量 |
- 返回
- != NULL: 创建成功,返回 rbb 对象 NULL: 创建失败
获取环形块状缓冲区(rbb)中的缓冲区
- 参数
-
- 返回
- 缓冲区大小
从 rbb 中分一个块,当分配成功后,这个块将会加入到 blk_list 中
- 参数
-
- 返回
- != NULL: 分配成功,返回分配的块对象 NULL: 分配失败
- 注解
- 当应用需要对齐访问 rbb 时,务必保证传入的 blk_size 大小已对齐。
从 rbb 中取出一个块
- 参数
-
- 返回
- != NULL: 取出成功,返回块 NULL: 取出失败
获取块队列,块队列中的块缓冲区地址连续
2 +------------------+---------------+--------+----------+--------+
3 | block3 | empty1 | block1 | block2 |fragment|
4 +------------------+------------------------+----------+--------+
5 |<-- return_size -->| |
6 |<--- queue_data_len --->|
9 +------------------+---------------+--------+----------+--------+
10 | block3 | empty1 | block1 | block2 |fragment|
11 +------------------+------------------------+----------+--------+
12 |<-- return_size -->| out of len(b1+b2+b3) |
13 |<-------------------- queue_data_len -------------------->|
- 参数
-
rbb | rbb 对象 |
queue_data_len | 块队列中数据的最大长度,返回的长度必须小于它 |
blk_queue | 块队列 |
- 返回
- 块队列中的数据总长度
处于 put 状态并且是连续的块,可以组成块队列。 这个方法将会返回下一个可以组成块队列的总长度。
- 参数
-
- 返回
- 下一个可以组成块队列的总长度