串口中断与环形队列——高级应用

本文介绍了如何使用环形队列解决串口数据接收速率过快的问题,通过中断服务函数将数据暂存队列,主函数再进行处理。详细描述了队列结构、初始化方法及数据压入、弹出操作的函数实现。

目录

  • 前言
  • 环形队列
  • 环形队列程序设计

前言

由于串口中断服务函数处理串口的数据寄存器的数据时,存储数据和处理数据需要一定的时间,所以接收数据的频率不能太快。为了解决这个问题,在中断服务函数中将串口的数据寄存器值存储在环形队列中,只做存储功能,处理数据的功能放在主函数中。这样一来,就不会遗漏任何一个字节的数据。

环形队列

串口的数据寄存器可以存放一个字节的数据,通过非空标志位触发中断,在中断服务函数中把数据存放在环形队列中,并清除标志位。等待下一次中断。环形队列就是一个蓄水池,不管数据多少,先装下不浪费。

环形队列程序设计

typedef struct
{
   
   
    uint32_t head;        //数组下标,指向队头
    uint32_t tail;        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值