ring_buffer.c 755 B

123456789101112131415161718192021222324252627282930313233343536
  1. //
  2. // Created by EDZ on 25-9-23.
  3. //
  4. #include "../Inc/ring_buffer.h"
  5. void RingBuffer_Init(RingBuffer *q) {
  6. q->head = 0;
  7. q->tail = 0;
  8. }
  9. int RingBuffer_IsEmpty(RingBuffer *q) {
  10. return (q->head == q->tail);
  11. }
  12. int RingBuffer_IsFull(RingBuffer *q) {
  13. return ((q->tail + 1) % QUEUE_SIZE == q->head);
  14. }
  15. int RingBuffer_Enqueue(RingBuffer *q, uint8_t data) {
  16. if (RingBuffer_IsFull(q)) {
  17. return -1; // 队列已满
  18. }
  19. q->buffer[q->tail] = data;
  20. q->tail = (q->tail + 1) % QUEUE_SIZE;
  21. return 0;
  22. }
  23. int RingBuffer_Dequeue(RingBuffer *q, uint8_t *data) {
  24. if (RingBuffer_IsEmpty(q)) {
  25. return -1; // 队列为空·
  26. }
  27. *data = q->buffer[q->head];
  28. q->head = (q->head + 1) % QUEUE_SIZE;
  29. return 0;
  30. }