123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include "ring_buffer.h"
- /*
- * 函数名:void ring_buffer_init(ring_buffer *dst_buf)
- * 输入参数:dst_buf --> 指向目标缓冲区
- * 输出参数:无
- * 返回值:无
- * 函数作用:初始化缓冲区
- */
- 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)
- * 输入参数:c --> 要写入的数据
- * dst_buf --> 指向目标缓冲区
- * 输出参数:无
- * 返回值:无
- * 函数作用:向目标缓冲区写入一个字节的数据,如果缓冲区满了就丢掉此数据
- */
- 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)
- * 输入参数:c --> 指向将读到的数据保存到内存中的地址
- * dst_buf --> 指向目标缓冲区
- * 输出参数:无
- * 返回值:读到数据返回0,否则返回-1
- * 函数作用:从目标缓冲区读取一个字节的数据,如果缓冲区空了返回-1表明读取失败
- */
- 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;
- }
- }
|