源码
这里采用的是一块二维数组作为缓冲区,每一行可以存储 MAX_ITEM_LEN 个数据,一共可以存储 MAX_ITEM 行数据。
#define MAX_ITEM 20
#define MAX_ITEM_LEN 51
unsigned char tx_buf[MAX_ITEM][MAX_ITEM_LEN] = { 0 };
int front, rear = 0;
int into_queue(unsigned char *in, unsigned char *len)
{
if ((rear + 1) % MAX_ITEM == front)
{
printf("\r\nqueue full\r\n");
return 0;
}
tx_buf[rear % MAX_ITEM][0] = *len;
memcpy(tx_buf[rear % MAX_ITEM] + 1, in, *len);
rear++;
return 1;
}
int out_queue(unsigned char *out, unsigned char *len)
{
if (front == rear % MAX_ITEM)
{
printf("\r\nqueue empty\r\n");
return 0;
}
*len = tx_buf[front][0];
memcpy(out, tx_buf[front] + 1, *len);
front = (front + 1) % MAX_ITEM;
return 1;
}