DSP

二维数组 fifo

2019-07-13 15:17发布

#include typedef struct { unsigned char can_frame_bufer[32][12]; /*对应取出元素的位置*/ unsigned int front; /*对应插入元素的位置*/ unsigned int rear; /*缓存can帧数的最大值*/ 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; /*等于二维数组的第一个index的最大值*/ g_can_frame_fifo->size = 32; } /*入队 *p_can_frame:can 数据的起是位置 * len: can frame 的帧数 1 */ 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; } /*预留一个can帧不用*/ 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; }