用于存储数据包(结构)的通用循环缓冲区.C编程

用于存储数据包(结构)的通用循环缓冲区.C编程,c,data-structures,buffer,C,Data Structures,Buffer,我试图实现用于存储数据包(我从MAC层获得的数据包)的缓冲区。基本上,我正在实现发射机,所以我需要存储一些数据包,然后在发射机未被占用时发送它们。我需要这部分的建议。我应该创建两个结构,一个可以称为buffer_pool(所有缓冲区的池),另一个buffer_t(表示一个缓冲包+一些额外的数据)。我想得到的是能够通过使用FIFO推送和弹出数据包。或者我可以用下面这样的结构来做 typedef struct _buffer_t { struct _buff

我试图实现用于存储数据包(我从MAC层获得的数据包)的缓冲区。基本上,我正在实现发射机,所以我需要存储一些数据包,然后在发射机未被占用时发送它们。我需要这部分的建议。我应该创建两个结构,一个可以称为buffer_pool(所有缓冲区的池),另一个buffer_t(表示一个缓冲包+一些额外的数据)。我想得到的是能够通过使用FIFO推送和弹出数据包。或者我可以用下面这样的结构来做

   typedef struct _buffer_t
{
    struct               _buffer_t *next;                ///< Next pointer
    volatile bool        alloc;                          ///< Alloc flag
    uint8_t              *dptr;                          ///< Data pointer - points to current position in buffer array
    uint8_t              len;                            ///< Len of the data
    uint8_t              index;                          ///< Index used for buffer tracking and debugging
    uint8_t              data[aMaxPHYPacketSize+1];       ///< Main data storage
} buffer_t;
typedef结构缓冲区
{
结构_buffer _t*next;//
听起来很合理,但我不明白您为什么同时需要*dptr和len?一旦有了指向这些结构之一的指针,您就已经知道“数据”在哪里:“&thisStruct->data”,并且可以在以下位置获取元素:[thisStruct->data[thisStruct->len]“@MartinJames我想你是对的,马丁,我确实需要len。谢谢你的建议。你认为我应该在这上面做另一个结构,以便更容易地使用缓冲区。typdef struct_buffer_pool{static buffer_buf[MAX_buf_pool_SIZE];uint8_t tail;uint8_t head;}您似乎正在将FIFO实现为链表。为什么不只是作为包含指针的循环缓冲区呢?链表只有在FIFO中存在的数据包数量在任何时候都没有合理的最大值时才具有优势。@kdopen我决定这样做。因此,我有一个带有尾部和头部指针以及数据向量的结构或者作为结构数组。同样,数据向量是带有布尔分配标志的结构数组和uint8_t数组。现在我只使用指针,我在检查内存的这部分是否分配了。