当前位置: 首页 > news >正文

第31讲 循环缓冲区与命令解析

      串口在持续接收数据时容易发生数据黏包(先接收的数据尚未被处理,后面的数据已经将内存覆盖)的情况,循环缓冲区的本质就是将串口接受到的数据马上拷贝到另外一块内存之中。为了避免新来的数据覆盖掉尚未处理的数据,一方面缓冲区的长度需要有一定的冗余,另外一方面需要引入写索引(写指针)始终指向未写数据区域的开头。

      当一包数据发生溢出的时候,也可以被切割为两部分,一部分写在缓冲区最后,另外一部分写在缓冲区开头。

        与此同时,为了防止写入buffer的新数据把尚未处理的旧数据覆盖掉,我们还需要引入读索引的机制,让其指向正在解析的数据的开头。CPU解析完成一帧数据之后再让readIndex指向下一帧需要解析的数据。

       综上,当新数据到来之时,我们就需要判断writeIndex和readIndex之间的空闲区域是否能装下新的数据,如果装不下,就只能抛弃这一帧数据。出现这种情况后,我们就需要调整这三个参数:(增大)缓冲区大小、(减慢)发送方发送速度、(加快)数据处理速度。

循环缓冲区算法示意图:

相关文章:

  • 【Tools】omnetpp5.6.2安装
  • 理解 Token 索引 vs 字符位置
  • DAY 17 训练
  • 【CTF】Linux Shell RCE绕过(bypass)技术总结
  • 低代码开发:开启软件开发的新篇章
  • 算法导论第9章思考题
  • 【c++】【数据结构】二叉搜索树详解
  • 数码管模块
  • 【Linux篇】高并发编程终极指南:线程池优化、单例模式陷阱与死锁避坑实战
  • M. Moving Both Hands(反向图+Dijkstra)
  • 蓝桥杯14届国赛 合并数列
  • Spyglass:在batch/shell模式下运行目标的顶层是什么?
  • 【project】--数据挖掘
  • Docker 部署 - Crawl4AI 文档 (v0.5.x)
  • 【TI MSPM0】CCS工程管理
  • 【LwIP源码学习6】UDP部分源码分析
  • 研修室智慧化升级实践:线上预约+智能门锁的融合方案
  • 高级数据结构:线段树
  • Problem B: 面向对象综合题2
  • LLM框架
  • 金正恩观摩朝鲜人民军各兵种战术综合训练
  • 王毅谈中拉论坛十年成果
  • 人才争夺战,二三线城市和一线城市拼什么?洛阳官方调研剖析
  • 母亲节|写给妈妈
  • 巴防空系统击落印度无人机,印称巴方违反停火协议
  • 构筑高地共伴成长,第六届上海创新创业青年50人论坛在沪举行