platform_queue.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. // #include "platform_queue.h"
  2. // t_queue can_rx;
  3. // t_queue can_tx;
  4. // void queue_mode(t_queue *this, uint8_t mode)
  5. // {
  6. // this->mode = mode;
  7. // }
  8. // void queue_empty_one(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM], uint8_t lock)
  9. // {
  10. // *(head + lock) = buff[lock];
  11. // *(tail + lock) = buff[lock];
  12. // this->full[lock] = 0;
  13. // }
  14. // // 清空队列
  15. // void queue_empty(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM])
  16. // {
  17. // for (int i = 0; i < QUEUE_BUFFER_SUM; i++)
  18. // {
  19. // *(head + i) = this->buff[i];
  20. // *(tail + i) = buff[i];
  21. // this->full[i] = 0;
  22. // }
  23. // this->lock = 0;
  24. // this->idle = 0;
  25. // }
  26. // void qudeue_empty(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM])
  27. // {
  28. // for (int i = 0; i < QUEUE_BUFFER_SUM; i++)
  29. // {
  30. // *(head + i) = this->buff[i];
  31. // *(tail + i) = buff[i];
  32. // this->full[i] = 0;
  33. // }
  34. // this->lock = 0;
  35. // this->idle = 0;
  36. // }
  37. // // 队列长度计算
  38. // void length_queue(t_queue *this, pdu_tag **head, pdu_tag **tail, uint8_t len)
  39. // {
  40. // for (int i = 0; i < QUEUE_BUFFER_SUM; i++)
  41. // {
  42. // if (*(tail + i) > *(head + i))
  43. // {
  44. // this->length[i] = *(tail + i) - *(head + i);
  45. // }
  46. // if (*(tail + i) < *(head + i))
  47. // {
  48. // this->length[i] = *(tail + i) + len - *(head + i);
  49. // }
  50. // if (*(tail + i) == *(head + i) && this->full[i])
  51. // {
  52. // this->length[i] = len;
  53. // }
  54. // if (*(tail + i) == *(head + i) && !this->full[i])
  55. // {
  56. // this->length[i] = 0;
  57. // }
  58. // }
  59. // }
  60. // // 入队
  61. // void push_queue(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM], uint8_t len, pdu_tag *data, uint8_t data_len)
  62. // {
  63. // if (this->mode)
  64. // {
  65. // // 空闲清除读队列
  66. // if (this->idle == 0)
  67. // {
  68. // empty_one_queue((*this), !this->lock);
  69. // }
  70. // // 非空闲清除写队列
  71. // empty_one_queue((*this), this->lock);
  72. // }
  73. // for (int num = 0; num < data_len; num++, data++)
  74. // {
  75. // if (!this->mode)
  76. // {
  77. // queue_update((*this));
  78. // if ((this->length[0] + this->length[1]) >= 4 && !this->idle)
  79. // {
  80. // if (this->length[!this->lock] == 0)
  81. // {
  82. // this->lock = !this->lock;
  83. // this->full[!this->lock] = 0;
  84. // }
  85. // for (int i = 0; i <= ((this->length[this->lock] + this->length[!this->lock]) - 4); i++)
  86. // {
  87. // if (++(*(head + !this->lock)) == buff[!this->lock] + len)
  88. // {
  89. // *(head + !this->lock) = buff[!this->lock];
  90. // }
  91. // if (*(tail + !this->lock) == *(head + !this->lock) && this->full[!this->lock] == 0)
  92. // {
  93. // break;
  94. // }
  95. // }
  96. // }
  97. // }
  98. // // 队列长度更新
  99. // queue_update((*this));
  100. // /*单纯的数据存储*/
  101. // **(tail + this->lock) = *data;
  102. // // 队列满
  103. // if (this->full[this->lock] == 1)
  104. // {
  105. // if (++(*(head + this->lock)) == buff[this->lock] + len)
  106. // {
  107. // *(head + this->lock) = buff[this->lock];
  108. // }
  109. // if (++(*(tail + this->lock)) == buff[this->lock] + len)
  110. // {
  111. // *(tail + this->lock) = buff[this->lock];
  112. // }
  113. // }
  114. // // 队列未满
  115. // else
  116. // {
  117. // if (++(*(tail + this->lock)) == buff[this->lock] + len)
  118. // {
  119. // *(tail + this->lock) = buff[this->lock];
  120. // }
  121. // if (*(tail + this->lock) == *(head + this->lock))
  122. // {
  123. // this->full[this->lock] = 1;
  124. // }
  125. // }
  126. // }
  127. // // 队列长度更新
  128. // queue_update((*this));
  129. // }
  130. // // 出队
  131. // void pull_queue(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM], uint8_t len, pdu_tag *data)
  132. // {
  133. // this->idle = 1;
  134. // this->ret = 0;
  135. // // 非空队列
  136. // if (!(*(tail + !this->lock) == *(head + !this->lock) && this->full[!this->lock] == 0))
  137. // {
  138. // *data = **(head + !this->lock);
  139. // // 指针指向溢出,指向数组首地址
  140. // if (++(*(head + !this->lock)) == buff[!this->lock] + len)
  141. // {
  142. // *(head + !this->lock) = buff[!this->lock];
  143. // }
  144. // this->full[!this->lock] = 0;
  145. // this->ret = 1;
  146. // }
  147. // queue_update((*this));
  148. // // 出队时判断当前队列是否为空队列,若为空队列且从队列不为空队列,则跳转,若前面没有获取到数据,重新到跳转队列获取数据
  149. // if (this->length[this->lock] != 0 && this->length[!this->lock] == 0)
  150. // {
  151. // this->lock = !this->lock;
  152. // if (this->ret == 0)
  153. // {
  154. // de_queue((*this), data);
  155. // }
  156. // }
  157. // // 这里结束 队列为空闲态
  158. // this->idle = 0;
  159. // }
  160. // void can_queue_init(void)
  161. // {
  162. // // 提前初始化,否则由于指针问题,HardFault_Handler()
  163. // empty_queue(can_rx);
  164. // mode_queue(can_rx, TASKQUEUE);
  165. // // 提前初始化,否则由于指针问题,HardFault_Handler()
  166. // empty_queue(can_tx);
  167. // mode_queue(can_tx, TASKQUEUE);
  168. // }