C语言实现FIFO代码

       最近笔者在做项目时需要C语言来实现一个FIFO,开始参考了以下这两位大神的代码。

大神一:

C语言实现FIFO代码_c语言 fifo-CSDN博客

大神二:

C语言实现FIFO代码_c语言 fifo-CSDN博客

结合两位大神所写代码的优缺点,本人在大神一的基础上增加了is_empty成员变量,实现了环形FIFO。先写后读,写满不能再写,读空不能再读。

fifo.c文件代码如下:


#include "fifo.h"
#include "xil_types.h"
/**
* @brief fifo结构
*/

typedef struct
{
    int ptr_write;
    int ptr_read;
    bool is_full;
    bool is_empty;
    // fifo中存储的元素数,不是字节大小
    int item_sum;
    // 元素大小.单位: 字节
    int item_size;
    void *fifo_ptr;
} Fifo;

int FifoAddr;

/**
* @brief 创建fifo
* @param item_sum:fifo中元素数.注意不是字节数
* @param item_size: 元素大小.单位: 字节
* @return fifo索引
*/

int fifo_create(int item_sum, int item_size)
{
    Fifo *fifo = (Fifo *)malloc(sizeof(Fifo));
    fifo->item_sum = item_sum;
    fifo->item_size = item_size;
    fifo->ptr_write = 0;
    fifo->ptr_read = 0;
    fifo->is_full = false;
    fifo->is_empty = true;
    fifo->fifo_ptr = (void *)malloc(item_sum * item_size);
    if(NULL == fifo->fifo_ptr)
    {
        xil_printf("malloc failed");
    }
    return (int)fifo;
}
void fifo_init(int fifo_index)
{
    Fifo *fifo = (Fifo *)fifo_index;

    fifo->ptr_write = 0;
    fifo->ptr_read = 0;
    fifo->is_full = false;
    fifo->is_empty = true;
}
/**
* @brief 删除fifo
* @param fifo_index: fifo索

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值