queue.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "queue.h"
  2. #include "stm32f4xx.h"
  3. /// front ... rear 数据方向 ->
  4. /* 队列的顺序存储结构(循环队列) */
  5. /****************************************************
  6. * 函 数 名:InitQueue
  7. * 函数功能:初始化队列
  8. * 入口参数:无
  9. * 说 明:
  10. ****************************************************/
  11. void InitQueue(SqQueue *Q)
  12. { /* 构造一个空队列Q */
  13. Q->front = Q->rear = 0; /*空队列*/
  14. }
  15. /****************************************************
  16. * 函 数 名:IsQueueEmpty
  17. * 函数功能:查询队列是否为空
  18. * 入口参数:Q 队列
  19. * 说 明:空队列,返回TRUE;否则返回FALSE
  20. ****************************************************/
  21. u8 IsQueueEmpty(const SqQueue *Q)
  22. { /* 若*/
  23. if (Q->front == Q->rear)
  24. return TRUE;
  25. else
  26. return FALSE;
  27. }
  28. /****************************************************
  29. * 函 数 名:QueueLength
  30. * 函数功能:初始化长度
  31. * 入口参数:Q 队列
  32. * 说 明:
  33. ****************************************************/
  34. int QueueLength(SqQueue Q)
  35. { /* 返回Q的元素个数,即队列的长度 */
  36. return (Q.rear - Q.front + MAX_QSIZE) % MAX_QSIZE;
  37. }
  38. /****************************************************
  39. * 函 数 名:GetHead
  40. * 函数功能:获取对头数据
  41. * 入口参数:Q 队列
  42. * 说 明:
  43. ****************************************************/
  44. u8 GetHead(SqQueue *Q, CanData_TypeDef *e)
  45. { /* 若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR */
  46. if (Q->front == Q->rear) /* 队列空 */
  47. return ERROR;
  48. *e = Q->CanBuf[Q->front];
  49. Q->front = (Q->front + 1) % MAX_QSIZE;
  50. return SUCCESS;
  51. }
  52. /****************************************************
  53. * 函 数 名:InsertQueue
  54. * 函数功能:队列插入数据
  55. * 入口参数:Q 待插入队列 e 待插入数据
  56. * 说 明:
  57. ****************************************************/
  58. u8 InsertQueue(SqQueue *Q, CanData_TypeDef e)
  59. { /* 插入元素e为Q的新的队尾元素 */
  60. if ((Q->rear + 1) % MAX_QSIZE == Q->front) /* 队列满 */
  61. return ERROR;
  62. Q->CanBuf[Q->rear] = e;
  63. Q->rear = (Q->rear + 1) % MAX_QSIZE;
  64. return SUCCESS;
  65. }
  66. // u8 DeQueue(SqQueue *Q, Can1Buf_TypeDef *e)
  67. //{ /* 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR */
  68. // if(Q->front==Q->rear) /* 队列空 */
  69. // return ERROR;
  70. // *e=Q->base[Q->front];
  71. // Q->front=(Q->front+1)%MAX_QSIZE;
  72. // return OK;
  73. // }