rt-thread
rt-thread copied to clipboard
[Bug] Ringbuffer peek 代码实现与文档不符
RT-Thread Version
master
Hardware Type/Architectures
与BSP无关
Develop Toolchain
Other
Describe the bug
RTT文档中心对于Ringbuffer的说明如下
下面介绍第二类接口,读数据但不取出数据: rt_size_t rt_ringbuffer_peek(struct rt_ringbuffer *rb, rt_uint8_t**ptr); 该接口用于获取 rb 指向的 ringbuffer 内部缓冲区第一个可读数据的地址,并保存到 *ptr,该接口返回 ringbuffer 内存储的字节数。
该接口被定义为“只读数据,但不取出数据”
实际的代码逻辑被实现为“返回当前可用的线性存储的数据首地址和取出的长度,并修改ringbuffer 中的 rd index”
该接口的实现不符合常规的 “peek” 的含义
rt_size_t rt_ringbuffer_peak(struct rt_ringbuffer *rb, rt_uint8_t **ptr)
{
RT_ASSERT(rb != RT_NULL);
*ptr = RT_NULL;
/* whether has enough data */
rt_size_t size = rt_ringbuffer_data_len(rb);
/* no data */
if (size == 0)
return 0;
*ptr = &rb->buffer_ptr[rb->read_index];
if((rt_size_t)(rb->buffer_size - rb->read_index) > size)
{
rb->read_index += size;
return size;
}
size = rb->buffer_size - rb->read_index;
/* we are going into the other side of the mirror */
rb->read_mirror = ~rb->read_mirror;
rb->read_index = 0;
return size;
}
Other additional context
No response
最新主线已将 rt_ringbuffer_peak 命名修复为 rt_ringbuffer_peek
只读逻辑仍然和文档不符