123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- // #include "platform_queue.h"
- // t_queue can_rx;
- // t_queue can_tx;
- // void queue_mode(t_queue *this, uint8_t mode)
- // {
- // this->mode = mode;
- // }
- // void queue_empty_one(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM], uint8_t lock)
- // {
- // *(head + lock) = buff[lock];
- // *(tail + lock) = buff[lock];
- // this->full[lock] = 0;
- // }
- // // 清空队列
- // void queue_empty(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM])
- // {
- // for (int i = 0; i < QUEUE_BUFFER_SUM; i++)
- // {
- // *(head + i) = this->buff[i];
- // *(tail + i) = buff[i];
- // this->full[i] = 0;
- // }
- // this->lock = 0;
- // this->idle = 0;
- // }
- // void qudeue_empty(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM])
- // {
- // for (int i = 0; i < QUEUE_BUFFER_SUM; i++)
- // {
- // *(head + i) = this->buff[i];
- // *(tail + i) = buff[i];
- // this->full[i] = 0;
- // }
- // this->lock = 0;
- // this->idle = 0;
- // }
- // // 队列长度计算
- // void length_queue(t_queue *this, pdu_tag **head, pdu_tag **tail, uint8_t len)
- // {
- // for (int i = 0; i < QUEUE_BUFFER_SUM; i++)
- // {
- // if (*(tail + i) > *(head + i))
- // {
- // this->length[i] = *(tail + i) - *(head + i);
- // }
- // if (*(tail + i) < *(head + i))
- // {
- // this->length[i] = *(tail + i) + len - *(head + i);
- // }
- // if (*(tail + i) == *(head + i) && this->full[i])
- // {
- // this->length[i] = len;
- // }
- // if (*(tail + i) == *(head + i) && !this->full[i])
- // {
- // this->length[i] = 0;
- // }
- // }
- // }
- // // 入队
- // 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)
- // {
- // if (this->mode)
- // {
- // // 空闲清除读队列
- // if (this->idle == 0)
- // {
- // empty_one_queue((*this), !this->lock);
- // }
- // // 非空闲清除写队列
- // empty_one_queue((*this), this->lock);
- // }
- // for (int num = 0; num < data_len; num++, data++)
- // {
- // if (!this->mode)
- // {
- // queue_update((*this));
- // if ((this->length[0] + this->length[1]) >= 4 && !this->idle)
- // {
- // if (this->length[!this->lock] == 0)
- // {
- // this->lock = !this->lock;
- // this->full[!this->lock] = 0;
- // }
- // for (int i = 0; i <= ((this->length[this->lock] + this->length[!this->lock]) - 4); i++)
- // {
- // if (++(*(head + !this->lock)) == buff[!this->lock] + len)
- // {
- // *(head + !this->lock) = buff[!this->lock];
- // }
- // if (*(tail + !this->lock) == *(head + !this->lock) && this->full[!this->lock] == 0)
- // {
- // break;
- // }
- // }
- // }
- // }
- // // 队列长度更新
- // queue_update((*this));
- // /*单纯的数据存储*/
- // **(tail + this->lock) = *data;
- // // 队列满
- // if (this->full[this->lock] == 1)
- // {
- // if (++(*(head + this->lock)) == buff[this->lock] + len)
- // {
- // *(head + this->lock) = buff[this->lock];
- // }
- // if (++(*(tail + this->lock)) == buff[this->lock] + len)
- // {
- // *(tail + this->lock) = buff[this->lock];
- // }
- // }
- // // 队列未满
- // else
- // {
- // if (++(*(tail + this->lock)) == buff[this->lock] + len)
- // {
- // *(tail + this->lock) = buff[this->lock];
- // }
- // if (*(tail + this->lock) == *(head + this->lock))
- // {
- // this->full[this->lock] = 1;
- // }
- // }
- // }
- // // 队列长度更新
- // queue_update((*this));
- // }
- // // 出队
- // void pull_queue(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM], uint8_t len, pdu_tag *data)
- // {
- // this->idle = 1;
- // this->ret = 0;
- // // 非空队列
- // if (!(*(tail + !this->lock) == *(head + !this->lock) && this->full[!this->lock] == 0))
- // {
- // *data = **(head + !this->lock);
- // // 指针指向溢出,指向数组首地址
- // if (++(*(head + !this->lock)) == buff[!this->lock] + len)
- // {
- // *(head + !this->lock) = buff[!this->lock];
- // }
- // this->full[!this->lock] = 0;
- // this->ret = 1;
- // }
- // queue_update((*this));
- // // 出队时判断当前队列是否为空队列,若为空队列且从队列不为空队列,则跳转,若前面没有获取到数据,重新到跳转队列获取数据
- // if (this->length[this->lock] != 0 && this->length[!this->lock] == 0)
- // {
- // this->lock = !this->lock;
- // if (this->ret == 0)
- // {
- // de_queue((*this), data);
- // }
- // }
- // // 这里结束 队列为空闲态
- // this->idle = 0;
- // }
- // void can_queue_init(void)
- // {
- // // 提前初始化,否则由于指针问题,HardFault_Handler()
- // empty_queue(can_rx);
- // mode_queue(can_rx, TASKQUEUE);
- // // 提前初始化,否则由于指针问题,HardFault_Handler()
- // empty_queue(can_tx);
- // mode_queue(can_tx, TASKQUEUE);
- // }
|