ringbuffer的常规用法_ring up

ringbuffer的常规用法_ring up自己的slam车关于ros和stm32控制板的通信部分,之前一直使用rosserial_python包,前段时间重新编写了上、下位机的通信程序,本篇只对数据的RingBuffer做点总结。由于是用于串口的帧数据传输,为保证每帧数据完整性,采用字节入队和出队的方式实现,测试结果也比较稳定。classRingBuffer{      public:      RingBuff…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

自己的slam车关于ros和stm32控制板的通信部分,之前一直使用rosserial_python包,前段时间重新编写了上、下位机的通信程序,本篇只对数据的RingBuffer做点总结。

由于是用于串口的帧数据传输,为保证每帧数据完整性,采用字节入队和出队的方式实现,测试结果也比较稳定。

class RingBuffer {

    
    public:
        RingBuffer(int buff_size);
        ~RingBuffer();
        
    public:
        int RingBuff_Rx(char* buf, int buf_len); 
        int RingBuff_Tx(char* buf, int buf_len);
        int RingBuff_Rx_Byte(char data);    //按字节入队
        int RingBuff_Tx_Byte(char* data);  //按字节出队
    
    private:
        unsigned int Head;    //队列出口
        unsigned int Tail;      //队列入口
        unsigned int Length;  //数据长度
        unsigned int Size;     //队列长度
        char* Ring_Buf;       
};

RingBuffer::RingBuffer(int buff_size):Head(0), Tail(0),Length(0)
{

    Size = buff_size;
    
    Ring_Buf = new char[buff_size];
}

RingBuffer::~RingBuffer()
{

    delete []Ring_Buf;
}

int RingBuffer::RingBuff_Rx_Byte(char data)
{

    if(Length >= Size)
    {

        return -1;
    }
    
    Ring_Buf[Tail] = data;
    Tail = (Tail + 1) % Size;
    Length++;
    
    return 1;
}

int RingBuffer::RingBuff_Tx_Byte(char* data)
{

    if(Length <= 0)
    {

        return -1;
    }
    
    *data = Ring_Buf[Head];
    Head = (Head + 1) % Size;
    Length–;
    
    return 1;
}

int RingBuffer::RingBuff_Rx(char* buf, int buf_len)
{

    int realSize = 0;
    int reLength = 0;
    
    reLength = Size – Length;
    
    if(reLength <= 0)
    {

        return -1;
    }
    
    if(buf_len > reLength)
    {

        realSize = reLength;
    } else if(buf_len <= reLength)
    {

        realSize = buf_len;
    }
    
    for(int i=0; i < realSize; i++)
    {

        Ring_Buf[Tail] = buf[i];
        Tail = (Tail + 1) % Size;
        Length++;
    }
    
    return realSize;
}

int RingBuffer::RingBuff_Tx(char* buf, int buf_len)
{

    int realSize = 0;
    
    if(Length <= 0)
    {

        return -1;
    }
    
    if(buf_len > Length)
    {

        realSize = Length;
    } else if(buf_len <= Length)
    {

        realSize = buf_len;
    }
    
    for(int i=0; i < realSize; i++)
    {

        buf[i] = Ring_Buf[Head];
        Head = (Head + 1) % Size;
        Length–;
    }
    
    return realSize;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195405.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2021年程序员平均工资_公司薪酬制度调查报告

    2021年程序员平均工资_公司薪酬制度调查报告根据中国互联网络信息中心(CNNIC)近日发布第47次《中国互联网络发展状况统计报告》。截至2020年12月,我国网民规模达9.89亿,较2020年3月增长8540万,互联网普及率达70.4%。截至2020年12月,我国在线教育、在线医疗用户规模分别为3.42亿、2.15亿,占网民整体的34.6%、21.7%。我国网上零售额达11.76万亿元,较2019年增长10.9%。其中,实物商品网上零售额9.76万亿元,占社会消费品零售总额的24.9%。截至2020年12月,我国网络购物用户规模达7.82亿,

    2022年10月11日
    2
  • Navicat 15 for MySQL激活码【2021最新】

    (Navicat 15 for MySQL激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月22日
    379
  • java中Set集合的遍历及实现类比较分析

    java中Set集合的遍历及实现类比较分析java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法packagecom.sort;importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;/***一个不包含重复元素的collection。更确切地讲,set不包含满足e1.equals(e2)的

    2022年5月29日
    38
  • npn饱和截止放大怎么判断_二极管饱和状态

    npn饱和截止放大怎么判断_二极管饱和状态幼儿园水平理解三极管截止、放大和饱和状态!书上看不懂,听课听不懂的过来!绕不开的三极管结构以NPN为例,晶体三极管的结构,这是很多人不想看的,但是确实是非常重要的!不看结构是理解不了工作原理的!(这样记忆:N是negative,负,代表多子为电子;P是positive,正,代表多子为空穴)注意观察三极管的结构,有助于理解工作时的状态。两张图结合起来看,略作解释:1.图中空心为空穴带正…

    2025年10月19日
    6
  • TCP和UDP的特点_TCP和UDP位于

    TCP和UDP的特点_TCP和UDP位于原文链接:https://www.jianshu.com/p/ef1811b3b44eOSI参考模型和TCP/IP协议群1.TCP/IP协议群的具体含义从字面意义上讲,有人可能会认为TCP/IP是指TCP和IP两种协议.实际生活中有时也确实就是指这两种协议.然而在很多情况下,它只是利用IP进行通信时所必须用到的协议群的统称.具体来说,IP或ICMP,TCP或U…

    2022年9月20日
    4
  • 亚马逊记AWS(Amazon Web Services)自由EC2应用

    亚马逊记AWS(Amazon Web Services)自由EC2应用

    2022年1月8日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号