rt_fifo.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: rt_fifo.h
  4. 文件版本: 01.01
  5. 创建作者: sunxi
  6. 创建日期: 2020-06-18
  7. 功能说明: 实时FIFO,采用免锁算法,只支持单进单出,不支持多进多处。
  8. 其它说明:
  9. 修改记录:
  10. */
  11. #ifndef _RT_FIFO_H
  12. #define _RT_FIFO_H
  13. /*------------------------------- 头文件 --------------------------------------
  14. */
  15. /*------------------------------- 宏定义 --------------------------------------
  16. */
  17. /*------------------------------ 类型结构 -------------------------------------
  18. */
  19. struct rt_fifo
  20. {
  21. unsigned char *buffer; // 数据缓存
  22. unsigned int size; // buffer 的大小,必须是2的n次方
  23. unsigned int in; // 数据进偏移 (in % size)
  24. unsigned int out; // 数据出偏移(out % size)
  25. };
  26. /*------------------------------ 函数声明 -------------------------------------
  27. */
  28. static inline void rt_fifo_reset(struct rt_fifo *fifo)
  29. {
  30. fifo->in = fifo->out = 0;
  31. }
  32. static inline unsigned int rt_fifo_len(struct rt_fifo *fifo)
  33. {
  34. return fifo->in - fifo->out;
  35. }
  36. static inline int rt_fifo_space(struct rt_fifo *fifo)
  37. {
  38. return fifo->size - (fifo->in - fifo->out) - 1;
  39. }
  40. int rt_fifo_init(struct rt_fifo *fifo, unsigned char *buffer, unsigned int size);
  41. unsigned int rt_fifo_get(struct rt_fifo *fifo,unsigned char *buffer, unsigned int len);
  42. unsigned int rt_fifo_put(struct rt_fifo *fifo,unsigned char *buffer, unsigned int len);
  43. #endif //_RT_FIFO_H
  44. /*------------------------------ 文件结束 -------------------------------------
  45. */