ring_buffer.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "ring_buffer.h"
  2. /*
  3. * 函数名:void ring_buffer_init(ring_buffer *dst_buf)
  4. * 输入参数:dst_buf --> 指向目标缓冲区
  5. * 输出参数:无
  6. * 返回值:无
  7. * 函数作用:初始化缓冲区
  8. */
  9. void ring_buffer_init(ring_buffer *dst_buf)
  10. {
  11. dst_buf->pW = 0;
  12. dst_buf->pR = 0;
  13. }
  14. /*
  15. * 函数名:void ring_buffer_write(unsigned char c, ring_buffer *dst_buf)
  16. * 输入参数:c --> 要写入的数据
  17. * dst_buf --> 指向目标缓冲区
  18. * 输出参数:无
  19. * 返回值:无
  20. * 函数作用:向目标缓冲区写入一个字节的数据,如果缓冲区满了就丢掉此数据
  21. */
  22. void ring_buffer_write(unsigned char c, ring_buffer *dst_buf)
  23. {
  24. int i = (dst_buf->pW + 1) % BUFFER_SIZE;
  25. if(i != dst_buf->pR) // 环形缓冲区没有写满
  26. {
  27. dst_buf->buffer[dst_buf->pW] = c;
  28. dst_buf->pW = i;
  29. }
  30. }
  31. /*
  32. * 函数名:int ring_buffer_read(unsigned char *c, ring_buffer *dst_buf)
  33. * 输入参数:c --> 指向将读到的数据保存到内存中的地址
  34. * dst_buf --> 指向目标缓冲区
  35. * 输出参数:无
  36. * 返回值:读到数据返回0,否则返回-1
  37. * 函数作用:从目标缓冲区读取一个字节的数据,如果缓冲区空了返回-1表明读取失败
  38. */
  39. int ring_buffer_read(unsigned char *c, ring_buffer *dst_buf)
  40. {
  41. if(dst_buf->pR == dst_buf->pW)
  42. {
  43. return -1;
  44. }
  45. else
  46. {
  47. *c = dst_buf->buffer[dst_buf->pR];
  48. dst_buf->pR = (dst_buf->pR + 1) % BUFFER_SIZE;
  49. return 0;
  50. }
  51. }