裸机-用结构体实现多个队列

.h


#define BufW u8                     //width
/**/
typedef struct FIFO_STRUCT{
    u16 lenght;                     //fifo length
    u16 snum;
    u16 head;
    u16 tail;
    BufW *str;
}fifo;

.c


/**
 * @brief ���ζ�д
 * 
 */
#include "uFifo.h"
/**
 * @brief 
 * 
 * @param ififo 
 * @param str     队列的实际存储空间
 * @param lenght  队列的长度
 */
u16 uFifoInit(fifo *ififo,BufW *str,u16 lenght){
    if(lenght==0)return 0;
    ififo->head = 0;
    ififo->snum = 0;
    ififo->tail = 0;
    ififo->str  = str;
    ififo->lenght = lenght;
    return 1;
}
/**
 * @brief 
 * 写一个数据到队列
 * @param ififo 
 * @param buf 
 */
void uFifoWrite(fifo *ififo,BufW buf){
    if(ififo->snum < ififo->lenght){
        ififo->str[ififo->head] = buf;
        if(++ififo->head >= ififo->lenght){
            ififo->head = 0;
        }
        ififo->snum++;
    }
}
/**
 * @brief 
 * 获取队列内数据量
 * @param ififo 
 * @return u8 
 */
u16 uFifoAvailable(fifo *ififo){
    return (ififo->snum);
}
/**
 * @brief 
 * 读一个数据
 * @param ififo 
 * @return BufW 
 */
BufW uFifoRead(fifo *ififo){
    BufW buf = ififo->str[ififo->tail];
    if(++ififo->tail >= ififo->lenght){
        ififo->tail = 0;
    }
    if(ififo->snum)ififo->snum--;
    return buf;
}


//

实用示例


u8 expFifoStr[100];
fifo expFifo;        

u8 expFifoStr2[200];
fifo expFifo2;
void exp(void){
    uFifoInit(&expFifo, expFifoStr, 100);  
    uFifoInit(&expFifo2, expFifoStr2, 200);   //

    while(1){
        uFifoWrite(&expFifo,'H');
        uFifoWrite(&expFifo,'E');
        uFifoWrite(&expFifo,'L');
        uFifoWrite(&expFifo,'L');
        uFifoWrite(&expFifo,'O');

        uFifoWrite(&expFifo2,'W');
        uFifoWrite(&expFifo2,'O');
        uFifoWrite(&expFifo2,'R');
        uFifoWrite(&expFifo2,'L');
        uFifoWrite(&expFifo2,'D');

        while(uFifoAvailable(&expFifo)){
            printf("%c",uFifoRead(&expFifo));
        }
        while(uFifoAvailable(&expFifo2)){
            printf("%c",uFifoRead(&expFifo2));
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值