嵌入式算法14---数据流与环形队列

本文介绍了如何使用环形队列在嵌入式系统中处理生产-消费模型的数据流,通过示例代码展示了如何实现数据的入队和出队操作,以及在内存管理上的优势。同时,强调了在实际应用中需要注意的数据丢失问题和同步控制。

摘要:对生产-消费模型的数据处理,使用环形队列管理,提高内存利用率。

1、应用场景

所谓生产-消费模型,即数据的产生和利用是异步处理,先”生产“了,然后才有”消费“。对嵌入式系统一般是数据接收与解析,数据缓存与发送。因为时序或者空间要求,两者需要异步处理;对于这种数据流,采用环形队列,先进先出的方式保存。

2、环形队列

队列是一种常用的数据结构,按照“先进先出”的原则进行操作的,环形队列是数据元素存储一轮后,再从头部开始入队,首尾相接,是一个装载固定数量元素的闭环。

typedef struct
{
   
   
    uint8_t data[RING_FIFO_SIZE];
    uint8_t head;
    uint8_t tail;
} ring_fifo_struct;

其最简形势如上,data为数据缓冲区,head和tail分别表示出队索引和入队索引。即数据入队在tail后追加,出队从head取。
初始状态下队列为空,head和tail相等,存满的情况下两者也相等,为了区分,只能少存一个,即再存一个为队满时提前认为已满。

具体动画效果如下:
嵌入式系统

3、源码

#include "stdio.h"
#include "string.h"

typedef signed char     int8_t;
typedef unsigned char   uint8_t;
typedef unsigned short  uint16_t;

#define RING_FIFO_SIZE  5

#define RING_FIFO_OK    0
#define RING_FIFO_FULL  -1
#
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值