K1Guitar/MyCode/mymidififo1.c

87 lines
1.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* mymidififo.c
*
* Created on: Jun 12, 2025
* Author: 19120
*/
#include "mymidififo1.h"
#include <string.h>
void mymidififo_init(MidiFifoSeq_t *rb)
{
rb->front = 0;
rb->rear = 0;
}
int mymidififo_InQueue(MidiFifoSeq_t *rb,MidiFifoItem_t* pFrame)
{
int rear = rb->rear;
int front = rb->front;
//如果队列已满,则入队失败
if ((rear + 1) % MIDI_FIFO_MAX_LEN == front)
{
return -1;
}
//入队操作
memcpy(&(rb->frame[rear]), pFrame, sizeof(MidiFifoItem_t));//赋值入队元素
rear = (rear + 1) % MIDI_FIFO_MAX_LEN;//计算入队后尾指针的位置
rb->rear = rear;
return 0;
}
MidiFifoItem_t* mymidififo_DeQueue(MidiFifoSeq_t *rb)
{
MidiFifoItem_t* pFrame;
int rear = rb->rear;
int front = rb->front;
//如果队列为空,则出队失败
if (rear == front)
{
return NULL;
}
//出队操作并不实施copy这样效率较高
pFrame = &(rb->frame[front]);
front = (front + 1) % MIDI_FIFO_MAX_LEN;//计算出队后头指针的位置
rb->front = front;
return pFrame;
}
MidiFifoItem_t* mymidififo_TryDeQueue(MidiFifoSeq_t *rb)
{
MidiFifoItem_t* pFrame;
int rear = rb->rear;
int front = rb->front;
//如果队列为空,则出队失败
if (rear == front)
{
return NULL;
}
//出队操作并不实施copy这样效率较高
pFrame = &(rb->frame[front]);
//front = (front + 1) % MIDI_FIFO_MAX_LEN;//计算出队后头指针的位置
//rb->front = front;
return pFrame;
}
int mymidififo_GetQueueLength(MidiFifoSeq_t *rb)
{
return (rb->rear - rb->front + MIDI_FIFO_MAX_LEN) % MIDI_FIFO_MAX_LEN;
}
int mymidififo_IsQueueFull(MidiFifoSeq_t *rb)
{
if ((rb->rear + 1) % MIDI_FIFO_MAX_LEN == rb->front)
return 1;
else
return 0;
}
int mymidififo_IsQueueEmpty(MidiFifoSeq_t *rb)
{
if(rb->front == rb->rear)
return 1;
else
return 0;
}