ringbuffer 工具函数源码及实例分享

本文详细介绍了ringbuffer的概念、适用场景,提供了API源码,并通过实例展示了如何定义数据结构、初始化内存空间、存储和读取数据。强调了线程安全在ringbuffer操作中的重要性。
摘要由CSDN通过智能技术生成

目录

1. 什么是ringbuffer

2. 什么情况下需要使用ringbuffer

3. 工具函数API 源码

4. 使用方法

4.1. 第一步用户按照如下格式定义好数据结构,并初始化好内存空间

4.2. 数据存储API调用方法:

4.3. 数据读取API调用方法:

4.4. 注意事项:


本文分享一个近期写的ring buffer的工具函数。

1. 什么是ringbuffer

ring buffer俗称环形缓冲区。

简单地说就是事先分配好一大块内存空间A,

然后把这块内存空间分成一小块一小块的空间(A0,A1,A2.......Amax),进行数据存取操作。

数据存入:第一条数据记录存入A0的位置 ,之后的数据记录依次存入A1,A1,A2....... Amax。

到达空间末尾Amax后又从A0位置开始存储,形成一个环形。

数据读取:从A0的位置开始读取,之后的读取A1,A1,A2....... Amax。

读到空间末尾Amax后又从A0位置开始读取,形成一个环形。

2. 什么情况下需要使用ringbuffer

eg1: windows/linux里: 线程1 需要周期性地存储某种类型的数据记录,线程2 需要周期性地读出该数据记录

eg2: 嵌入式系统里 : task1 需要周期性地存储某种类型的数据记录,task2 需要周期性地读出该数据记录

eg3: SOC多芯片之间: 芯片1 需要周期性地存储某种类型的数据记录,芯片2 需要周期性地读出该数据记录

3. 工具函数API 源码

本工具库只有如下两个API。

CmnRingBufferWrite 【记录存储 API】

CmnRingBufferRead 【记录读取API】

内存分配部分由用户负责。


/*******************************************************************************
**  Function Name:
**      CmnRingBufferWrite write by Liuyanqiu
**  Function Description:
**      write one items into the ring buffer
**  Inputs:
**      ringBufTotalItems:   the total items  of ring buffer
**      pcur_writeIdx:
**      cur_readIdx:
**      psrc:
**      pdst:
**      itemSize:
**  Outputs:
**      pcur_writeIdx: the next write idx  in the ring buffer
**      discardMsgCnt: 
*******************************************************************************/
void CmnRingBufferWrite( UINT8  ringBufTotalItems,
                                 UINT8* pcur_writeIdx,
                                 UINT8  cur_readIdx,
                                 UINT8* psrc,
                                 UINT8* pdst,
                                 UINT8  itemSize,
                                 UINT32* msgCnt,
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值