Skip to content

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

@gerald0057

Description

@gerald0057

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions