rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

[Bug] Ringbuffer peek 代码实现与文档不符

Open gerald0057 opened this issue 1 month ago • 1 comments

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

gerald0057 avatar Nov 06 '25 07:11 gerald0057

最新主线已将 rt_ringbuffer_peak 命名修复为 rt_ringbuffer_peek 只读逻辑仍然和文档不符

gerald0057 avatar Nov 06 '25 07:11 gerald0057