环形缓冲区在stm32上的使用

 

#define BUFFER_SIZE 1024        /* 环形缓冲区的大小 */typedef struct{    unsigned char buffer[BUFFER_SIZE];  /* 缓冲区空间 */    volatile unsigned int pW;           /* 写地址 */    volatile unsigned int pR;           /* 读地址 */} ring_buffer;
void ring_buffer_init(ring_buffer *dst_buf){    dst_buf->pW = 0;    dst_buf->pR = 0;
}
void ring_buffer_write(unsigned char c, ring_buffer *dst_buf){    int i = (dst_buf->pW + 1) % BUFFER_SIZE;    if(i != dst_buf->pR)    // 环形缓冲区没有写满    {        dst_buf->buffer[dst_buf->pW] = c;        dst_buf->pW = i;    }}

int ring_buffer_read(unsigned char *c, ring_buffer *dst_buf){    if(dst_buf->pR == dst_buf->pW)    {        return -1;    }    else    {        *c = dst_buf->buffer[dst_buf->pR];        dst_buf->pR = (dst_buf->pR + 1) % BUFFER_SIZE;        return 0;    }}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值