FifoQueue.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "FifoQueue.h"
  2. #define FALSE false
  3. #define TRUE true
  4. struct FifoQueue Fas_Tasks; //fas协议任务
  5. struct FifoQueue Pub_Tasks; //公共任务
  6. /*
  7. 使用:
  8. QueueInit(&SysMsg);
  9. if(QueueIn(&SysMsg,i) == QueueFull) break;
  10. if(QueueOut(&SysMsg,&sh) == QueueEmpty) break;
  11. */
  12. //Queue Init
  13. void QueueInit ( struct FifoQueue *Queue )
  14. {
  15. Queue->front = Queue->rear;//初始化时队列头队列首相连
  16. Queue->count = 0; //队列计数为0
  17. }
  18. // Queue In
  19. bool QueueIn ( struct FifoQueue *Queue, ElemType sdat ) //数据进入队列
  20. {
  21. if ( ( Queue->front == Queue->rear ) && ( Queue->count == QueueSize ) )
  22. {
  23. // full //判断如果队列满了
  24. return FALSE; //返回队列满的标志
  25. }
  26. else
  27. {
  28. // in
  29. Queue->dat[Queue->rear] = sdat;
  30. Queue->rear = ( Queue->rear + 1 ) % QueueSize;
  31. Queue->count = Queue->count + 1;
  32. return TRUE;
  33. }
  34. }
  35. // Queue Out
  36. bool QueueOut ( struct FifoQueue *Queue, ElemType *sdat )
  37. {
  38. if ( ( Queue->front == Queue->rear ) && ( Queue->count == 0 ) )
  39. {
  40. // empty
  41. return FALSE;
  42. }
  43. else
  44. {
  45. // out
  46. *sdat = Queue->dat[Queue->front];
  47. Queue->front = ( Queue->front + 1 ) % QueueSize;
  48. Queue->count = Queue->count - 1;
  49. return TRUE;
  50. }
  51. }