备份一个简易队列写法

备份一个简易队列写法

定义

typedef struct {
    uint8_t data[14];
} can_frame_t;

typedef struct {
    can_frame_t frames[CAN_FRAME_QUEUE_SIZE];
    volatile uint8_t head;
    volatile uint8_t tail;
    volatile uint8_t count;
} can_frame_queue_t;
can_frame_queue_t g_can1_frame_queue = {0};

队列满

static inline bool queue_is_full(can_frame_queue_t *queue) {
    return queue->count >= CAN_FRAME_QUEUE_SIZE;
}

队列空

static inline bool queue_is_empty(can_frame_queue_t *queue) {
    return queue->count == 0;
}

入队

static bool enqueue_frame(can_frame_queue_t *queue, const uint8_t *frame_data) {
    if (queue_is_full(queue)) {
        return false;
    }
    
    memcpy(queue->frames[queue->head].data, frame_data, 14);
    queue->head = (queue->head + 1) % CAN_FRAME_QUEUE_SIZE;
    queue->count++;
    return true;
}

出队

static bool dequeue_frame(can_frame_queue_t *queue, uint8_t *frame_data) {
    if (queue_is_empty(queue)) {
        return false;
    }
    
    memcpy(frame_data, queue->frames[queue->tail].data, 14);
    queue->tail = (queue->tail + 1) % CAN_FRAME_QUEUE_SIZE;
    queue->count--;
    return true;
}
posted @ 2025-09-23 14:07  一般摸鱼。  阅读(8)  评论(0)    收藏  举报