// #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); // }