一、特性
二、快速使用
QUEUE_HandleTypeDef qUartTx;QUEUE_DATA_T BufferUartTx[Q_UART_BUFFER_SIZE];int main(void){QUEUE_DATA_T temp;//初始化队列Queue_Init(&qUartTx, BufferUartTx, Q_UART_BUFFER_SIZE);while(1){//入队Queue_Push(&qUartTx, 'Q');Queue_Push(&qUartTx, 'u');Queue_Push(&qUartTx, 'e');Queue_Push(&qUartTx, 'u');Queue_Push(&qUartTx, 'e');//出队Queue_Pop(&qUartTx, &temp);Queue_Pop(&qUartTx, &temp);Queue_Pop(&qUartTx, &temp);Queue_Pop(&qUartTx, &temp);Queue_Pop(&qUartTx, &temp);}}
三、配置说明
四、数据结构
队列的数据结构为 QUEUE_HandleTypeDef 用于保存队列的状态,源码如下:
typedef struct QUEUE_HandleTypeDef{unsigned int head; //队列头指针unsigned int tail; //队列尾指针unsigned int buffer_length; //队列缓存长度(初始化时赋值)QUEUE_DATA_T * buffer; //队列缓存数组(初始化时赋值)}QUEUE_HandleTypeDef;
五、创建队列
1、创建队列缓存
由于我们采用值传递的方式保存队列数据,因此我们在创建队列前要手动创建一个队列缓存区,用于存放队列数据。
QUEUE_DATA_T BufferUartTx[1024];
2、创建队列结构
接下来使用 QUEUE_HandleTypeDef 创建队列结构,用于保存队列的状态:
QUEUE_HandleTypeDef qUartTx;
3、初始化队列
准备好队列缓存和队列结构后调用 Queue_Init 函数来创建队列,该函数原型如下:
void Queue_Init(QUEUE_HandleTypeDef * hqueue, QUEUE_DATA_T * buffer, unsigned int len) 参考代码:
Queue_Init(&qUartTx, BufferUartTx, Q_UART_BUFFER_SIZE);
六、压入队列
1、单数据压入
将数据压入队列尾部使用 Queue_Push 函数,该函数原型如下:
QUEUE_StatusTypeDef Queue_Push(QUEUE_HandleTypeDef * hqueue, QUEUE_DATA_T data)参考代码:
Queue_Push(&qUartTx, 'Q');Queue_Push(&qUartTx, 0x51);Queue_Push(&qUartTx, 81);
2、多数据压入
若需要将多个数据(数组)压入队列可以使用 Queue_Push_Array 函数,原理上循环调用 Queue_Push 函数来实现的,函数原型如下:
unsigned int Queue_Push_Array(QUEUE_HandleTypeDef * hqueue, QUEUE_DATA_T * pdatas, unsigned int len)参数说明:
七、弹出队列
1、单数据弹出
将队列头部数据弹出队列使用 Queue_Pop 函数,需要注意的是,弹出的数据将从队列中删除,该函数原型如下:
QUEUE_StatusTypeDef Queue_Pop(QUEUE_HandleTypeDef * hqueue, QUEUE_DATA_T * pdata)参考代码:
QUEUE_DATA_T temp;if(QUEUE_OK = Queue_Pop(&qUartTx, &temp)){// temp 为队列弹出的数据}else{// 弹出数据失败}
2、多数据弹出
若需要将多个数据弹出队列可以使用 Queue_Pop_Array 函数,原理上循环调用 Queue_Pop 函数来实现的,需要注意的是,成功弹出的数据将从队列中删除,函数原型如下:
unsigned int Queue_Pop_Array(QUEUE_HandleTypeDef * hqueue, QUEUE_DATA_T * pdatas, unsigned int len)3、单数据复制
4、多数据复制
八、其他功能
1、清空队列
函数原型:
void Queue_Clear(QUEUE_HandleTypeDef * hqueue)2、获取队列数据数量
当需要获取队列中的数据长度时,调用 Queue_Count 函数,函数原型如下:
unsigned int Queue_Count(QUEUE_HandleTypeDef * hqueue)