嵌入式技术论坛
直播中

那些年儿ing

12年用户 1302经验值
擅长:84784
私信 关注
[问答]

求助大神,rt_ringbuffer_peak疑问求解

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;
}
请教一下ringbuffer.c,里面的一段代码,谢谢!rt_ringbuffer_peak里的最后的rb->read_index = 0;有点不理解,不应该是rb->read_index += size;才对吗?

回帖(1)

梅利号

2022-5-27 11:31:02
bufsize - readindex小于size时,表示,从readindex到数组终点处有数据。你看,后续代码中,size = bufsize - readindex,将readindex设置为0,意味着将目前readindex到数组终点的数据取出来了,下次从数组起点处读取。

这个分析应该没错的。

我在上一楼回帖的观点是,这个函数的功能与文档描述不符,不要用它了。如果按照文档说明,这个函数只到ptr处理处就结束了,不应该去动readindex的。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分