1.相比于定长队列,环队队列在省空间方面有很大的优势。 可以缓存变长的数据。
2.如果数据量小,也可以采用取走前面的数据,后面追加的数据向前移动的方式。但是缺点就是所有数据都需要向前移动,而且在移动过程中如果有新数据进来会出错。 而且环形队列就完美解决这个问题。
3.环形队列,不需要移动数据,取走数据以后front+1 就行了。因此不会有出错的风险。
裸机队列:
typedef struct
{
u16 front;
u16 rear;
u16 length;
u8 data[USART_QUEUE_SIZE];
} type_usart_queue;
用于不同优先级及中断任务中入队:
//====================================================================================================================
//入队
static uint8_t UsartQueuePush(type_usart_queue* queue, uint8_t data)
{
if ((queue->rear+1)%USART_QUEUE_SIZE == queue->front)
{
return USART_QUEUE_FULL;
}
queue->data[queue->rear] = data;
queue->rear = (queue->rear + 1) % USART_QUEUE_SIZE;
return USART_QUEUE_OK;
}
//=======================================================================================&#