C语言实现一个简易的环形FIFO

一种可存取任意类型数据的环形FIFO Head和Tail相连的一种可以循环存数组的结构,存数据前会判断当前FIFO数据指针是否到Tail,如果到Tail,则下一个数据会判断Head是否为空,如果为空,则将数据存到Head中。如有错误,欢迎指正,原创不易,转载留名! 阅读详情

        设计一个环形FIFO缓冲区,用于存储原始数据。环形FIFO缓冲区最大有10个节点,每个节点有200个原始数据,即200个unsigned int类型的数据。其中,包括写FIFO函数,读FIFO函数,删除某节点函数,删除整个FIFO函数等。

#define FIFO_NODE_NUM 10
#define FIFO_NODE_DATA_NUM 200
#define FIFO_DATA_TYPE unsigned int

typedef struct
{
    FIFO_DATA_TYPE data[FIFO_NODE_DATA_NUM];
}FIFO_NODE;

typedef struct
{
    FIFO_NODE fifo_node[FIFO_NODE_NUM];
    unsigned int write_index;
    unsigned int read_index;
}FIFO;

FIFO raw_data_fifo;

/**
* @brief 初始化FIFO
*/
void raw_data_fifo_init(void)
{
    raw_data_fifo.write_index = 0;
    raw_data_fifo.read_index = 0;
}   

/**
 * @brief 向FIFO中写入原始数据
 * @param data 指向FIFO_DATA_TYPE类型的指针,用于存储要写入的数据
 * @param data_num 要写入的数据数量
 */
void raw_data_fifo_write(FIFO_DATA_TYPE *data, unsigned int data_num)
{
    unsigned int i;
    for(i = 0; i < data_num; i++)
    {
        raw_data_fifo.fifo_node[raw_data_fifo.write_index].data[i] = data[i];
    }
    raw_data_fifo.writ
C语言实现FIFO代码 C语言实现fifo 阅读详情

相关推荐

嵌入式C语言轻量级数据结构库:环形缓冲区与FIFO队列实现

环形缓冲区(Ring Buffer)和FIFO队列是嵌入式系统中实现高效、确定性数据流处理的基础技术,其核心原理基于索引模运算与无锁状态判定,确保O(1)时间复杂度与硬实时响应能力。这类结构规避了动态内存分配风险,满足IEC 61508等功能安全标准对可预测性的严苛要求。在UART通信、传感器数据采集、协议解析及RTOS任务间解耦等典型场景中,环形缓冲区与FIFO队列支撑着中断安全、零拷贝、低延迟的数据暂存与转发。NeedfulThings库以C99零依赖设计,将这两大关键技术封装为资源可控、类型安全、MC

weixin_42576410的博客 312

C语言实现先进先出(FIFO)队列

入队操作将元素添加到队列的末尾,而出队操作则从队列的头部移除元素。在计算机科学中,队列是一种常见的数据结构,遵循先进先出(First-In-First-Out,FIFO)的原则。在本文中,我将介绍如何使用C语言实现一个简单的FIFO队列,并提供相应的源代码。你可以根据需要扩展该队列的功能,例如增加动态分配内存的能力,实现循环队列等。如果队列为空,则无法出队,并打印相应的提示信息。如果队列已满,则无法入队,并打印相应的提示信息。如果队列为空,则无法获取头部元素,并打印相应的提示信息。数组用于存储队列的元素,

ByteJolt的博客 957

C语言实现FIFO环形队列:从原理到嵌入式工程实践

从数据结构的基础概念出发,FIFO(先进先出)队列是计算机系统中协调数据生产与消费的核心机制。在C语言环境下,实现FIFO通常采用环形队列或链表两种形态,其中环形队列凭借固定内存、稳定耗时和无碎片特性,成为嵌入式开发、串口通信、图像采集等场景的首选。文章深入剖析数组环形队列的初始化、入队、出队实现,以及空满判断的工程细节,并结合多线程环境给出互斥锁与条件变量的生产者消费者模型。进一步探讨了容量设为2的幂实现位运算取模、缓存行隔离避免伪共享、溢出策略选择等性能优化技巧,帮助开发者在资源受限的系统中构建高效可靠

weixin_30036289的博客 124

嵌入式C语言循环FIFO实现:从环形队列原理到串口中断缓冲应用

在嵌入式开发中,数据缓冲与实时处理是一对永恒的矛盾。环形队列(Circular Buffer)作为一种经典的数据结构,用固定大小的连续内存和两个索引实现高效的首尾相接存储,无需动态内存分配,避免了内存碎片问题,尤其适合中断服务与主循环之间的数据传递。C语言的数组与指针操作天然契合环形队列的底层实现,通过位运算替代取模运算可进一步提升性能。基于循环FIFO的先进先出特性,它能有效平滑串口收发、传感器采集等场景中生产与消费速度不匹配的突发流量。本文从数据结构设计、入队出队核心逻辑、边界条件判定,到串口中断与多线

weixin_29192211的博客 167

OpenWrt虚拟机磁盘扩容实战:从SquashFS到ext4的完整避坑指南

本文详细介绍了OpenWrt虚拟机磁盘扩容的完整流程,重点对比了SquashFS和ext4文件系统在扩容操作上的关键差异。通过五步安全迁移法和直接分区调整方案,帮助用户有效解决磁盘空间不足问题,同时提供高级技巧和故障排除指南,确保扩容过程顺利无坑。

weixin_29251131的博客 232

测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案?

本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。

weixin_29224309的博客 268

逆变器专题(9)-基于dq坐标系的逆变器解耦控制建模与实时仿真分析

本文深入探讨了基于dq坐标系的逆变器解耦控制建模与实时仿真分析。通过生动的比喻和详细的数学推导,阐述了如何通过坐标变换和前馈补偿实现d轴与q轴的独立控制,从而提升系统动态性能与稳定性。文章还介绍了在MATLAB/Simulink中搭建仿真模型、分析动态响应与稳定性的方法,并展望了硬件在环(HIL)实时仿真的高级验证手段,为新能源并网与电机驱动领域的工程师提供了宝贵的实践指南。

gold的博客 547

TwinCAT3新手必看:5分钟搞定EtherCAT从站PDO动态配置(附电流变量添加技巧)

本文为TwinCAT3新手提供了EtherCAT从站PDO动态配置的快速入门指南。文章详细解析了Process Data Object(PDO)在实时数据交换中的核心作用,并分步演示了在TwinCAT3工程中扫描从站、动态添加与映射PDO(包括接收PDO和发送PDO)的完整操作流程。重点分享了如何灵活添加并监控如电机实际电流等关键工艺变量的高级技巧,并针对不同品牌驱动器的兼容性问题提供了实用的调试心法和解决方案,帮助工程师快速上手并优化工业自动化系统。

xgboost6farmer的博客 454

STM32F103C8T6心电采集实战:从PCB设计到上位机开发的完整指南(附TI杯开源资料)

本文详细介绍了基于STM32F103C8T6的心电采集系统开发全流程,从PCB设计到上位机开发,特别适合大学生电子设计大赛参赛者参考。内容涵盖硬件设计精要、软件算法优化及上位机开发技巧,并附TI杯开源资料,帮助开发者低成本实现医疗级心电信号采集。

kafka6courier的博客 194

Gazebo仿真UUV水下机器人:从环境搭建到避障算法实战

本文详细介绍了使用Gazebo仿真平台进行UUV水下机器人开发的全流程,涵盖从环境搭建、uuv_simulator配置、传感器集成到核心避障算法实战。通过搭建水下仿真实验室并实现基于激光雷达数据的反应式避障算法,为水下机器人算法验证与开发提供了高效、低成本的解决方案。

weixin_28840591的博客 265

AI一键生成带货短视频:电商直播的未来

随着电子商务行业的快速发展,直播带货已成为一种极为有效的营销手段。然而,传统的人工直播方式存在诸多局限性,如人力成本高、主播培训周期长等问题。为了解决这些挑战,一种基于AI技术的一键生成带货视频解决方案应运而生——这就是“Anchor Crafter”。这项创新技术不仅能够自动创建高质量的带货视频,而且还能实现人物与商品之间的自然交互,极大地提升了用户体验。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2205

使用 MATLAB/Simulink 构建一个 基于神经网络控制的单相并网逆变器系统

单相并网逆变器广泛应用于户用光伏小型储能和电动汽车V2G等场景。其核心控制目标是实现高质量的并网电流,即电流与电网电压同频同相(单位功率因数),且总谐波畸变率 (THD)极低。非线性因素:电力电子器件的开关死区非线性电感寄生参数。参数不确定性:滤波器元件(L, C)的老化温漂。电网扰动:电压谐波频率波动不平衡。模型依赖性:PI、PR等控制依赖于精确的系统模型,模型失配导致性能下降。动态响应:在光照突变(光伏)或负载突变(储能)下,需快速、无超调地响应。

xiaoheshang_123的博客 274

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: makefile之ifeq代码的AI注释【学习】
下一篇: VS Code如何统计代码量
薇远镖局
博客等级 码龄19年 297粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薇远镖局

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值