LWIP数据包管理
lwip使用pbuf结构体来描述协议栈使用的数据包,pbuf结构体在pbuf.h中的定义
struct pbuf{
struct pbuf*next; //指向下一个pbuf结构体,可以构成链表
void *payload; //指向该pbuf真正的数据区
u16_t tot_len; //当前pbuf和链表中后面所有pbuf的数据长度,他们属于一个数据包
u16_t len; //当前pbuf的数据长度
u8_t type; //当前pbuf的类型
u8_t flags; //状态位,保留
u16_t ref; //该pbuf被引用的次数
}
next:指向下一个pbuf的结构体,每个pbuf能够存放的数据有限,如果应用有大量的数据的话我们需要多个pbuf来存放,我们将同一个数据包的pbuf连接在一起形成一个链表,next字段就是实现这个链表的关键
payload:指向该pbuf的数据存储区的首地址,STM32F407内部网络模块接收到数据并将数据提交给LWIP的时候,就是将数据存储到payload指定的存储区中,同样在发送数据的时候将payload所指向的存储区转给STM32F429的网络模块去发送
tot_len:我们再接收或者发送数据的时候数据会存放在pbuf链表中,tot_len字段就表示当前pbuf和链表中以后所有pbuf总的数据长度
len:当前pbuf总数据的长度
type:当前pbuf的类型,一共有四种:PBUF_RAM PBUF_ROM PBUF_REF PBUF_POOL
flag:保留位
ref&#x