#ifndef __SYS_QUEUE_H__ #define __SYS_QUEUE_H__ #include "stdint.h" #include "stdbool.h" #define QUEUE_MAX_DATA_NUM 32 //队列中有几包数据 #define QUEUE_MAX_DATA_LEN 64 //队列中单包数据长度 typedef struct { int length; uint8_t cmd[QUEUE_MAX_DATA_LEN]; }queue_element_t; typedef struct { queue_element_t data[QUEUE_MAX_DATA_NUM]; int front; int rear; int size; } queue_list_t; void queue_init(queue_list_t* queue); bool queue_full(queue_list_t* queue); bool queue_empty(queue_list_t* queue); void queue_in(queue_list_t* queue, void* item, int length); int queue_out(queue_list_t* queue, void* item); int queue_size(queue_list_t* queue); #define QUEUE_MSG_PROCESS(QUEUE,FUNC) \ do { \ uint8_t out[QUEUE_MAX_DATA_LEN]; \ if(!queue_empty(QUEUE)) { \ int len = queue_out(QUEUE, out); \ if(len > 0) { \ FUNC(out, len); \ } \ } \ } while (0) #define QUEUE_MSG_EMPTY(QUEUE) (queue_empty(QUEUE)) #define QUEUE_MSG_NOT_EMPTY(QUEUE) (!queue_empty(QUEUE)) #endif /* __SYS_QUEUE_H__ */