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

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

3天内不再提示

缓冲区是啥意思 STM32串口数据接收之环形缓冲区

ss 来源:博客园、CSDN 作者:Fireflycjd、IT_阿水 2021-07-22 15:33 次阅读

缓冲区顾名思义是缓冲数据用的。实现缓冲区最简单的办法时,定义多个数组,接收一包数据到数组A,就把接收数据的地址换成数组B,每个数据有个标记字节用于表示这个数组是否收到数据,收到数据是否处理完成。

缺点:

①缓冲数据组数一定,且有多变量,代码结构不太清晰。

②接收数据长度可能大于数组大小,也可能小于数组大小。不灵活,需要接收数据很长时容易出错,且内存利用率低。

解决这个问题的好办法是:环形缓冲区。

环形缓冲区简介

环形缓冲区就是一个带“头指针”和“尾指针”的数组。在单片机中串口通信是我们使用最频繁的,使用串口通信就会用到串口的数据接收与发送,环形缓冲区方式接收数据可以更好的保证数据丢帧率第。

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

环形缓冲区的一个有用特性是:当一个数据元素被用掉后,其余数据元素不需要移动其存储位置。相反,一个非圆形缓冲区(例如一个普通的队列)在用掉一个数据元素后,其余数据元素需要向前搬移。换句话说,环形缓冲区适合实现先进先出缓冲区,而非环形缓冲区适合后进先出缓冲区。

整合自:博客园、CSDN

编辑:jq

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

    关注

    2270

    文章

    10900

    浏览量

    355891
收藏 人收藏

    评论

    相关推荐

    AMD Zen 4处理器悄然禁用循环缓冲区

    近日,AMD在更新BIOS后,对Zen 4架构的处理器进行了一项未公开说明的更改:禁用了循环缓冲区(Loop Buffer)功能。这一变化引发了业界和用户的广泛关注。 循环缓冲区作为CPU前端的一个
    的头像 发表于 12-11 13:46 174次阅读

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

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

    内存缓冲区和内存的关系

    内存缓冲区和内存之间的关系是计算机体系结构中一个至关重要的方面,它们共同协作以提高数据处理的效率和系统的整体性能。
    的头像 发表于 09-10 14:38 566次阅读

    单片机中的几种环形缓冲区的分析和实现

    单片机中的几种环形缓冲区的分析和实现一、简介环形缓冲区(RingBuffer)是一种高效的使用内存的方法,它将一段固定长度的内存看成一个环形
    的头像 发表于 08-14 08:39 837次阅读
    单片机中的几种<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b>的分析和实现

    ESP8266是否可以添加AT命令并使接收缓冲区大小可调?

    是否可以添加 AT 命令并使接收缓冲区大小可调? 在Arduino上,我总是丢弃数据字节,而arduino硬件串行只有64字节的缓冲区,看起来ESP8266有256个字节。
    发表于 07-17 07:36

    ESP8266有双缓冲区吗?

    为 1 ms),直到它充满,然后切换缓冲区并计数填充第二个缓冲区,而不会丢失任何样本。准备好的填充缓冲区应由一些标志发出信号,并且应在接收到来自路由器的一些
    发表于 07-16 07:29

    创建DMA通道时,能否将DMA缓冲区的大小指定为8字节,并将DMA缓冲区的编号指定为1?

    创建 DMA 通道时,能否将 DMA 缓冲区的大小指定为 8 字节,并将 DMA 缓冲区的编号指定为 1?
    发表于 05-31 07:46

    stm32野火开发板上做USB通信,PC端USB的缓冲区串口缓冲区的大小是多少?

    stm32野火开发板上做USB通信,用的CDC虚拟串口stm32端将ADC采集的数据通过USB传给电脑,传输速率理论上是12Mbps,上位机是从PC端的
    发表于 05-17 14:02

    具有八进制反相缓冲区的扫描测试设备数据

    电子发烧友网站提供《具有八进制反相缓冲区的扫描测试设备数据表.pdf》资料免费下载
    发表于 05-17 09:58 0次下载
    具有八进制反相<b class='flag-5'>缓冲区</b>的扫描测试设备<b class='flag-5'>数据</b>表

    实现稳健的微控制器到FPGA SPI接口: 双缓冲区

    在介绍双缓冲器之前,我们将简要探讨Verilog 脉宽调制器 (PWM) 的工作原理。这一点很重要,因为双缓冲区最好被看作是硬件模块 (如 PWM) 的可寻址接口。
    的头像 发表于 05-16 09:36 707次阅读
    实现稳健的微控制器到FPGA SPI接口: 双<b class='flag-5'>缓冲区</b>!

    Stm32采用环形缓冲区接收rk3588的数据代码

    Stm32采用环形缓冲区接收rk3588的数据代码
    的头像 发表于 05-15 10:10 582次阅读

    交换机与路由器缓冲区:寻找完美大小

    *本文系SDNLAB编译自瞻博网络技术专家兼高级工程总监Sharada Yeluri领英 在路由器和交换机中,缓冲区至关重要,可以防止网络拥塞期间的数据丢失。缓冲区到底要多大?这个问题在
    的头像 发表于 04-11 16:56 1323次阅读
    交换机与路由器<b class='flag-5'>缓冲区</b>:寻找完美大小

    交换芯片缓冲区大小是什么

    交换芯片缓冲区大小并不一定是固定的。缓冲区的设计和实现会根据芯片的具体型号、规格以及应用场景的不同而有所差异。一些交换芯片可能具有固定大小的缓冲区,以满足特定的性能需求或成本限制。然而,随着技术
    的头像 发表于 03-18 14:42 631次阅读

    使用UART FIFO缓冲区时,缓冲区中的数据有时会损坏的原因?

    我在使用 UART FIFO 缓冲区时遇到了以下问题。 问题描述: 当通过两个 UART 通道使用完整的 UART FIFO 缓冲区并通过两个通道进行通信时,缓冲区中的数据有时会损坏,
    发表于 03-06 06:59

    没有办法通过FX3固件检查缓冲区是卡住了还是已满?

    。 这会导致视频数据在 FPGA 端备份(因为缓冲区报告已满,因此无法写入),然后系统中断。 在直播 480p60、720p60 或 1080p30 时不存在此问题。 我尝试将 MultiChannel
    发表于 02-23 08:01