0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

环形缓冲区的实现原理

西西 来源:csdn 作者:野猪力量 2020-03-22 10:03 次阅读

通信程序中,经常使用环形缓冲区作为数据结构来存放通信中发送和接收的数据。环形缓冲区是一个先进先出的循环缓冲区,可以向通信程序提供对缓冲区的互斥访问。

环形缓冲区的实现原理

环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性。如果有多个读写用户访问环形缓冲区,那么必须添加互斥保护机制来确保多个用户互斥访问环形缓冲区。

图1、图2和图3是一个环形缓冲区的运行示意图。图1是环形缓冲区的初始状态,可以看到读指针和写指针都指向第一个缓冲区处;图2是向环形缓冲区中添加了一个数据后的情况,可以看到写指针已经移动到数据块2的位置,而读指针没有移动;图3是环形缓冲区进行了读取和添加后的状态,可以看到环形缓冲区中已经添加了两个数据,已经读取了一个数据。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信程序
    +关注

    关注

    0

    文章

    14

    浏览量

    8489
  • 数据结构
    +关注

    关注

    3

    文章

    569

    浏览量

    40071
  • 环形缓冲
    +关注

    关注

    0

    文章

    3

    浏览量

    1503
收藏 人收藏

    评论

    相关推荐

    STM32进阶之串口环形缓冲区实现

    完了数据,‘0’地址空间的数据进行释放掉,列队头指向下一个可以处理数据的地址‘1’。从而实现整个环形缓冲区的数据读写。看图,队列头就是指向已经存储的数据,并且这个数据是待处理的。下一个CPU处理的数据
    发表于 06-08 14:03

    杰杰带你解读【机智云】环形缓冲区源码

    ,人家既然能拿来做商业用,还是有很厉害的地方的,如果还不知道什么叫环形缓冲区环形队列)的同学,请看——STM32进阶之串口环形缓冲区
    发表于 07-17 14:58

    MCU进阶之串口环形缓冲区实现

    是列队头的数据,处理完了数据,‘0’地址空间的数据进行释放掉,列队头指向下一个可以处理数据的地址‘1’。从而实现整个环形缓冲区的数据读写。看图,队列头就是指向已经存储的数据,并且这个数据是待处理的。下一个
    发表于 08-17 13:11

    STM32串口环形缓冲区实现

    是列队头的数据,处理完了数据,‘0’地址空间的数据进行释放掉,列队头指向下一个可以处理数据的地址‘1’。从而实现整个环形缓冲区的数据读写。看图,队列头就是指向已经存储的数据,并且这个数据是待处理
    发表于 10-16 11:40

    STM32串口环形缓冲区实现方法

    STM32串口环形缓冲区实现
    发表于 12-24 07:30

    请问串口DMA+环形缓冲区如何实现不定长度的数据收发?

    请问串口DMA+环形缓冲区如何实现不定长度的数据收发?
    发表于 12-08 06:13

    STM32进阶之串口环形缓冲区实现资料下载

    电子发烧友网为你提供STM32进阶之串口环形缓冲区实现资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-20 08:46 13次下载
    STM32进阶之串口<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b><b class='flag-5'>实现</b>资料下载

    [嵌入式开发模块]单片机串口模块:串口+定时器+环形缓冲区 实现无串口IDLE中断接收不定长串口数据

    前言本周看了些代码模块化和代码框架抽象分层的知识,现在尝试将手里代码重新整理成模块,方便以后业务开发。现在摸索了两天,在网上看了些别人的文章和代码,初步整理好了第一版(2019.12.6)。MCU: 华大的MCU HC32F030K8TA,其内核是Cortex-M0+,8KRAM,64KROM。编程环境:keil5模块分析介绍这款MCU的性能一般,功能较少,目前想要让其外接一个通信模块...
    发表于 11-06 11:21 10次下载
    [嵌入式开发模块]单片机串口模块:串口+定时器+<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b> <b class='flag-5'>实现</b>无串口IDLE中断接收不定长串口数据

    STM32进阶之串口环形缓冲区实现

    在此之前,我们来回顾一下队列的基本概念:队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。
    发表于 02-09 11:58 6次下载
    STM32进阶之串口<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b><b class='flag-5'>实现</b>

    STM32进阶之串口环形缓冲区实现

    码代码的应该学数据结构都学过队列。环形队列是队列的一种特殊形式,应用挺广泛的。因为有太多文章关于这方面的内容,理论知识可以看别人的,下面写得挺好的:STM32进阶之串口环形缓冲区实现
    发表于 12-06 10:00 2891次阅读

    环形缓冲区实现思路

    单片机程序开发一般都会用到UART串口通信,通过通信来实现上位机和单片机程序的数据交互。通信中为了实现正常的收发,一般都会有对应的发送和接收缓存来暂存通信数据。这里使用环形缓冲区的方式
    的头像 发表于 01-17 15:07 1562次阅读

    STM32进阶之串口环形缓冲区实现

    在此之前,我们来回顾一下队列的基本概念:
    的头像 发表于 02-21 09:29 1269次阅读
    STM32进阶之串口<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b><b class='flag-5'>实现</b>

    STM32进阶之串口环形缓冲区实现

    STM32进阶之串口环形缓冲区实现
    的头像 发表于 09-19 09:20 2113次阅读
    STM32进阶之串口<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b><b class='flag-5'>实现</b>

    C++环形缓冲区设计与实现

    的存储空间。环形缓冲区的特点是其终点和起点是相连的,形成一个环状结构。这种数据结构在处理流数据和实现数据缓存等场景中具有广泛的应用。 环形缓冲区
    的头像 发表于 11-09 11:21 1770次阅读
    C++<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b>设计与<b class='flag-5'>实现</b>

    分享一个嵌入式通用FIFO环形缓冲区实现

    开源项目ringbuff ,是一款通用FIFO环形缓冲区实现的开源库,作者MaJerle,遵循 MIT 开源许可协议。
    的头像 发表于 10-23 16:20 206次阅读
    分享一个嵌入式通用FIFO<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b><b class='flag-5'>实现</b>库