ring_buffer.c 865 B

1234567891011121314151617181920212223242526272829303132333435363738
  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. memcpy(q->buffer[q->tail], data, BL_DATA_SIZE);
  21. q->tail = (q->tail + 1) % QUEUE_SIZE;
  22. return 0;
  23. }
  24. int RingBuffer_Dequeue(RingBuffer *q, uint8_t *data) {
  25. if (RingBuffer_IsEmpty(q)) {
  26. return -1; // 队列为空·
  27. }
  28. // *data = q->buffer[q->head];
  29. memcpy(data,q->buffer[q->head], BL_DATA_SIZE);
  30. q->head = (q->head + 1) % QUEUE_SIZE;
  31. return 0;
  32. }