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

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

3天内不再提示

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

ss 来源:博客园、CSDN 作者:Fireflycjd、IT_阿水 2021-07-22 15:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

缺点:

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

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

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

环形缓冲区简介

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

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

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

整合自:博客园、CSDN

编辑:jq

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

    关注

    2313

    文章

    11195

    浏览量

    374656
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言的缓冲区(缓存)详解

    缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。   
    发表于 01-14 07:30

    CW32L052串口缓冲区机制

    默认缓冲区配置 CW32L052的UART模块支持硬件FIFO(通常为16字节),但HAL库或用户代码需手动管理接收缓冲区。若未显式分配足够大的软件缓冲区,可能导致
    发表于 11-24 06:40

    飞凌嵌入式ElfBoard-标准IO接口设置缓冲区

    ;\\n\"时,标准I/O才会执行对应的系统I/O操作。对于输出流,在输出一个换行符前将数据缓存(除非缓冲区已经被填满),当输出换行符时,再将这一行数据通过系统I/O(write函数)刷入到内核
    发表于 11-14 09:02

    【道生物联TKB-623评估板试用】+3、模块深度测评:高频率数据传输的缓冲区陷阱与优化方案

    模块深度测评:高频率数据传输的缓冲区陷阱与优化方案 本文记录了在实际项目中使用620 LoRa模块时遇到的一个隐蔽却关键的问题,以及完整的排查和解决方案。 问题现象:高频率发送数据时的异常行为
    发表于 10-15 19:29

    移植的lvgl,在运行的时候,缓冲区无法释放怎么解决?

    代码在运行的时候,只有lvgl线程用于刷新,另一个线程只有一个串口打印。 当运行一段时间后,发现,程序会在LVGl中,lv_refr.c这个库下面第625行代码, 在这一直判断,看介绍说是在等待释放缓冲区,求大神给个思路
    发表于 09-09 07:28

    如何清除CYUSB3014的缓冲区数据?USB接口数据什么时候发送到电脑?

    、如何清除GPIF II接口处对应的DMA BUFFER数据?当标志设置为满/非满状态时,一旦 DMA 缓冲区已满,标志信号就会指示它已满。清除DMA缓冲区数据后,相应的标志信号会改变
    发表于 07-18 07:58

    USB缓冲区中的内容满了之后,是否有标志位进行反馈?

    USB缓冲区中的内容满了之后,是否有标志位进行反馈。
    发表于 07-17 07:13

    请问USB缓冲区数据可以多次取吗?

    在使用USB软件获取数据是,下位机给我发送了13个32位数据到USB IN缓冲区,为什么我调用API函数想要第一次取1个32位数据,取完之后再取12位
    发表于 07-16 08:12

    【RA4L1-SENSOR】串口收发 + 环形缓冲区

    )%MAX_BUFFER_LEN;//防止尾部越界 uart_queue.len++;//环形缓冲区数据长度 return QUEUE_SUCCESS; } static QUEUE queue_read(uint8_t
    发表于 06-11 10:24

    解析RZ/N2L CANFD模块的缓冲区机制(2)

    在工业自动化、智能交通、机器人等领域,CANFD(CAN with Flexible Data-Rate)技术正逐步取代传统CAN,以适应更高的数据速率和更复杂的通信需求。本文将深入解析RZ/N2L CANFD模块的缓冲区机制,帮助工程师更高效地管理CAN消息,提高系统性
    的头像 发表于 05-19 14:13 1630次阅读
    解析RZ/N2L CANFD模块的<b class='flag-5'>缓冲区</b>机制(2)

    解析RZ/N2L CANFD模块的缓冲区机制(1)

    在工业自动化、智能交通、机器人等领域,CANFD(CAN with Flexible Data-Rate)技术正逐步取代传统CAN,以适应更高的数据速率和更复杂的通信需求。本文将深入解析RZ/N2L CANFD模块的缓冲区机制,帮助工程师更高效地管理CAN消息,提高系统性
    的头像 发表于 05-19 14:10 1447次阅读
    解析RZ/N2L CANFD模块的<b class='flag-5'>缓冲区</b>机制(1)

    FX3 Socket缓冲区切换的最大时间是多少?

    DMA 描述符时发送数据,则这种简单的方案会导致数据丢失,通常需要 1 微秒。” (第 18 页) 您能告诉我缓冲区切换的确切最大时间吗?这对于我们连接到 FX3 GPIF 接口的 ASIC 芯片的
    发表于 05-16 07:51

    在传输DMA通道中的所有缓冲区后,DMA标志(就绪和部分)被卡住了是怎么回事?

    2 次传输,再次卡住的时间更短,然后顺利传输数据。 Buffers working until they get stuck缓冲器在卡住之前一直在工作 前两个缓冲区的标志 A(上)和 B(下),然后
    发表于 05-16 07:18

    DMA缓冲区设置为48K,如果没有写满48K,数据会自动被发送出去吗?

    请问我的DMA缓冲区设置为48K,如果没有写满48K,数据会自动被发送出去吗。2.有没有清空DMA缓冲区的函数,我直接调用CyU3PUsbFlushEp()不起作用。
    发表于 05-09 06:21

    求助,关于3014的缓冲区设置疑问求解

    和数量改为34kb,6。rgb24 1080p@60fps无法出图? dma缓冲区大小和数量是否有什么说法吗?需要对应? fx3可用的dma大小为多少? 根据usbcap抓取数据以及demo来看
    发表于 05-06 13:42