[应用方案] 个简单的C语言循环缓冲队列实现

[复制链接]
 楼主| beacherblack 发表于 2024-2-21 10:04 | 显示全部楼层 |阅读模式

  1. typedef struct {
  2.     u8 head;
  3.     u8 tail;
  4.     u8 len;
  5. }ListSt;

  6. #define UART_BUFF_SIZE 100
  7. u8 g_listBuff[UART_BUFF_SIZE];
  8. ListSt g_uartListTcb = {0};

  9. void AddItem(u8 dat)
  10. {
  11.     if (g_uartListTcb.len == UART_BUFF_SIZE)
  12.     {
  13.         return;
  14.     }
  15.     g_listBuff[g_uartListTcb.tail] = dat;
  16.     g_uartListTcb.len++;
  17.     (g_uartListTcb.tail++) %= UART_BUFF_SIZE;
  18. }

  19. u8 GetItem(void)
  20. {
  21.     u8 ret;
  22.     if (GetItem() == 0)
  23.     {
  24.         return;
  25.     }
  26.     ret = g_listBuff[g_uartListTcb.head];
  27.     g_uartListTcb.head++;
  28.     g_uartListTcb.head %= UART_BUFF_SIZE;
  29.     g_uartListTcb.len--;
  30.     return ret;
  31. }

  32. u8 GetItemRemain(void)
  33. {
  34.     return g_uartListTcb.len;
  35. }


maqianqu 发表于 2024-3-4 11:22 | 显示全部楼层
一个简单的C语言循环缓冲队列(Circular Buffer Queue)可以通过数组和两个指针(一个指向队头,另一个指向队尾)来实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

1507

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部