STM32串口中断收发的应用接口设计

数据环形缓冲区:

#define FIFO_BUF_SIZE        512 //必须是2的幂次方
#define FIFO_BUF_SIZE_MASK   (FIFO_BUF_SIZE - 1)

typedef struct
{
    uint32 head;                                 //头指针
    uint32 tail;                                    //尾指针
    uint8 buf[FIFO_BUF_SIZE];         //缓冲区
} fifo_buf_t;

缓冲区接口:

status_t fifo_empty(fifo_buf_t* fifo)     //判断缓冲区是否为空
{
    if (fifo->tail == fifo->head) // empty
    {
        return OK;
    }

    return ER;
}

status_t fifo_full(fifo_buf_t* fifo)     //判断缓冲区是否为满
{
    if (((fifo->tail + 1) & FIFO_BUF_SIZE_MASK) == 
        fifo->head) // full
    {
        return OK;
    }

    return ER;
}

status_t fifo_put(fifo_buf_t* fifo, uint8 c)   //往缓冲区放一个字节
{
    if (fifo_full(fifo) == OK) // full
    {
        return ER;
    }

    fifo->buf[fifo->tail] = c;
    fifo->tail ++;
    fifo->tail &= FIFO_BUF_SIZE_MASK;
    
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值