首先定义一个ring buffer的结构体 代码语言:javascript 复制 typedef struct{uint8_t*buffer;//存放实际的数据int32_t read_offset;//读取地址相对buffer的偏移量int32_t write_offset;//写入地址相对buffer的偏移量int32_t valid_size;//buffer的有效sizeint32_t total_size;//buffer的总大小,即init时malloc的...
这块连续的存储会被反复使用,向 ringBuffer 写入数据总是从写指针的位置开始,如写到实际存储区的末尾还没有写完,则将剩余的数据从存储区的头开始写;从该 ringBuffer 读出数据也是从读指针的位置开始,如读到实际存储区的末尾还没有读完,则从存储区的头开始读剩下的数据。 为了保证写入的数据不会覆盖 ringBuffer ...
这块连续的存储会被反复使用,向 ringBuffer 写入数据总是从写指针的位置开始,如写到实际存储区的末尾还没有写完,则将剩余的数据从存储区的头开始写;从该 ringBuffer 读出数据也是从读指针的位置开始,如读到实际存储区的末尾还没有读完,则从存储区的头开始读剩下的数据。 为了保证写入的数据不会覆盖 ringBuffer ...
*/staticsize_tputData(CRingBuffer& ring,void* pBuffer,size_tnBytes){structheader*pHeader;uint8_t* p =reinterpret_cast<uint8_t*>(pBuffer);// makes addr arithmetic easier.structheader*pLastItem;intlastSize =0;while(nBytes >sizeof(struct header)) { pHeader =reinterpret_cast<struct header*>...
RingBuffer 是一个基于C语言开发的轻量级环形缓冲区,适用于各嵌入式平台的串口收发等应用场景; 相较于普通的收发缓冲数组,环形缓冲区的操作更加简单,性能更加强大;使用 RingBuffer 提供的函数,可以轻松实现数据的读写、查询、删除等操作,不需要编写复杂的地址记录、读写计数等代码,减少了数据指针溢出、数据被覆盖的风险...
ring buffer / circular buffer 又名环形队列 / 环形缓冲区,其通过开辟固定尺寸的内存来实现反复复用同一块内存的目的。由于预先开辟了固定尺寸的内容,所以当数据满的时候,可以有两种处理方式,具体使用哪一种按照实际需求,具体如下: 1)当队列满的时候,新来的数据会覆盖最古老的数据,这种数据结构的特点是数据的写入...
int32_t RingBuffer_ReadByte(RingBuff_t*ringBuff);//-1 0~255 //写入一个字节int32_t RingBuffer_WriteByte(RingBuff_t *ringBuff,uint8_tbyte); //伪读取,因为真的读取的话,会清空读取到的缓存的. 这里是读取到后依然不清除缓存 uint32_t RingBuffer_PseudoReadBuf(RingBuff_t*ringBuff,uint8_t...
教你C语言徒手写-环形缓冲区ring buffer共计2条视频,包括:C语言徒手写环形缓冲区、华清创客学院等,UP主更多精彩视频,请关注UP账号。
uint32_t RingBuffer_ReadBuf(RingBuff_t*ringBuff,uint8_t *buf, uint32_t length); //从RingBuffer中读取一个字节,如果没有读取到内容,则返回-1. int32_t RingBuffer_ReadByte(RingBuff_t*ringBuff);//-1 0~255 //写入一个字节int32_t RingBuffer_WriteByte(RingBuff_t *ringBuff,uint8_tbyte...
void ring_buffer_init(ring_buffer* rb, uint8_t* buf, unsigned int size) { rb->buffer = buf; rb->head = buf; rb->tail = buf; rb->size = size; rb->full = false; } bool ring_buffer_is_empty(const ring_buffer* rb) { ...