首页 > 其他分享 >环形缓冲区

环形缓冲区

时间:2023-06-02 17:37:35浏览次数:41  
标签:pr pw pRingBuffer 环形 wdata RingBuffer 缓冲区

typedef struct
{
   struct HORN *Buffer; //缓冲区
   unsigned int  pw; //写地址
   unsigned int  pr; //读地址
}RingBuffer_t,*pRingBuffer_t;

static RingBuffer_t RingBuffer;

/**
 @brief  写一个字节
 @param  wdata:写入的一个字节数据
 @retval 1:环形缓冲区满 0:环形缓冲区未满
**/
uint8_t RingBuffer_Write_One_Byte(pRingBuffer_t pRingBuffer,const struct HORN wdata)
{
    if((pRingBuffer->pw + 1)%BUFF_SIZE==pRingBuffer->pr)//环形缓冲区满
    {
      return 1;
    }else //环形缓冲区未满
    {
       pRingBuffer->Buffer[pRingBuffer->pw] = wdata;
       pRingBuffer->pw=(pRingBuffer->pw+1)%BUFF_SIZE;
       return 0;
    }
}
/**
 @brief  读一个字节数据
 @param  rdata:保存读出的数据 
 @retval 1:已读出全部数据 0:仍有未读出的数据
**/
uint8_t RingBuffer_Read_One_Byte(pRingBuffer_t pRingBuffer,struct HORN *rdata)
{
    if(pRingBuffer->pr==pRingBuffer->pw)//已读出全部数据
    {
        return 1;
    }else//仍有未读出的数据
    {
        *rdata=pRingBuffer->Buffer[pRingBuffer->pr];
        pRingBuffer->pr=(pRingBuffer->pr+1)%BUFF_SIZE;
        return 0;
    }
}
//环形缓冲区buff初始化
void ring_buff_init(void)
{
    RingBuffer.Buffer = horn_data;
    RingBuffer.pw = 0;
    RingBuffer.pr = 0;
}
//环形缓冲区添加数据
void ring_buff_add_data(unsigned char voide,unsigned char vol)
{
    struct HORN wdata;
    wdata.voide = voide;
    wdata.vol = vol;
    RingBuffer_Write_One_Byte(&RingBuffer,wdata);
}

 

标签:pr,pw,pRingBuffer,环形,wdata,RingBuffer,缓冲区
From: https://www.cnblogs.com/-yjx-/p/17452467.html

相关文章

  • echarts——环形图,异步请求数据后,有数据但图不显示
    echats官网:https://echarts.apache.org/ 我的原因:series里的data数据,需要是value,name格式,我的后台返回的数据是{number:1,typeName:'1'}解决方法:做下转换res.result.forEach(item=>{item.name=item.typeName;item.value=item.number;}) ......
  • 数据结构之环形队列
    @TOC一.环形队列的定义及其特点循环队列是一种线性数据结构,其操作依然是先进先出原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。特点:对于一个普通队列来说,每出队一次,头指针就必须往后移一位,这样使用过的空间就无法再重复使用,(头指针无法回移),即使队列元素......
  • 整数缓冲区
    整数缓冲区java预先创建了256个常用的整数包装类型对象。在实际应用中,对已创建的对象进行重复使用。publicclassDemo02{publicstaticvoidmain(String[]args){Integerinteger1=newInteger(100);Integerinteger2=newInteger(100);......
  • echarts环形图渐变色和鼠标悬停样式
    计算后的渐变方向如图所示 <divclass="echarts"id="echat"ref="echat"></div>legendData:['小于1h','1~6h','6~24h','24h以上']total:733getData(){constcos=Math.cos;c......
  • STM32环形串口队列程序 大数据串口收发 实时不丢包 串口程序平常产品开发中编写或移
    STM32环形串口队列程序大数据串口收发实时不丢包串口程序平常产品开发中编写或移植的程序并亲自测试通过,均为工程文件格式,可直接编译使用。注:毫无基础的请勿拍,程序文件不接受退货。该程序为大数据量吞吐的串口收发例程,中断接收,边收边发,采用大数据环形队列,处理过程超快不丢包,接......
  • 使用方法添加分割的环形图,记录原因(不使用方法的会依赖背景色,背景框透明情况下会出现问
    首先来看效果图:代码如下:<template><divid="yiCdzEcharts"style="width:130px;height:230px;"></div></template><script>exportdefault{props:["echartsData"],data(){return{pie......
  • C语言之环形队列
    一、环形队列的优势环形队列是一种特殊的队列,它可以解决普通队列在使用时空间利用不充分的问题。在环形队列中,当队列满时,队列的尾指针指向队列的起始位置,而不是指向队列的最后一个元素。这样可以在不浪费空间的情况下存储更多的元素。下面我们来详细讲解一下环形队列的......
  • C语言之环形队列
    . 一、环形队列的优势环形队列是一种特殊的队列,它可以解决普通队列在使用时空间利用不充分的问题。在环形队列中,当队列满时,队列的尾指针指向队列的起始位置,而不是指向队列的最后一个元素。这样可以在不浪费空间的情况下存储更多的元素。      下面我们来详细讲解一下环形......
  • 环形链表
     /** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    bool hasCycle(ListNode......
  • 美观实用的环形图,提升数据表达效果
    什么是环形图?环形图是一种数据可视化的图表类型,它通常用于显示数据的比例关系和占比情况。环形图与饼图类似,都是由一个圆形或圆环和若干个扇形组成,每个扇形的面积大小表示该数据所占比例的大小。与饼图不同的是,环形图通常会在圆心处放置标签或其他信息,同时环形图还可以设置内圆......