#include
typedef struct {
unsigned char can_frame_bufer[32][12];
unsigned int front;
unsigned int rear;
unsigned int size;
} can_frame_fifo, *p_can_frame_fifo;
can_frame_fifo g_can_frame_fifo;
void fifo_init(void)
{
memset(g_can_frame_fifo.can_frame_bufer, 0x00, sizeof(g_can_frame_fifo.can_frame_bufer));
g_can_frame_fifo->front = 0;
g_can_frame_fifo->rear = 0;
g_can_frame_fifo->size = 32;
}
static int en_can_fifo(unsigned char *p_can_frame, unsigned char can_frame_len)
{
int ret = -1;
if (NULL == p_can_frame) {
printf("the p_can_frame is null!
");
goto error;
}
if ((g_can_frame_fifo.rear + 1) % g_can_frame_fifo.size == g_can_frame_fifo->front) {
printf("%s
","The g_can_frame_fifo is full");
goto error;
}
memcpy(g_can_frame_fifo.can_frame_bufer[g_can_frame_fifo.rear], p_can_frame, 12);
g_can_frame_fifo.rear = (g_can_frame_fifo.rear + 1) % g_can_frame_fifo.size;
ret = 0;
error:
return ret;
}
static int out_can_fifo(unsigned char *p_can_frame, unsigned char can_frame_len)
{
int ret = -1;
if (NULL == p_can_frame) {
printf("the p_can_frame is null!
");
goto error;
}
if(g_can_frame_fifo.front == g_can_frame_fifo.rear)
{
printf("%s
","The g_can_frame_fifo is empty");
goto error;
}
memcpy(p_can_frame, g_can_frame_fifo.can_frame_bufer[g_can_frame_fifo.front], 12);
g_can_frame_fifo.front = (g_can_frame_fifo.front + 1) % g_can_frame_fifo.size;
ret = 0;
error:
return ret;
}