LWIP之 pbuf.c 文件学习

LWIP之 pbuf.c 文件学习

Pbuf数据结构

struct pbuf { struct pbuf *next; void *payload; u16_t tot_len; u16_t len; u8_t type; u8_t flags; u16_t ref;};

各字段说明:

next 字段指针指向下一个 pbuf 结构,因为实际发送或接收的数据包可能很大,而每个 pbuf 能够管理的数据可能很少,所以,往往需要多个 pbuf 结构才能完全描述一个数据包。所以,所有的描述同一个数据包的 pbuf 结构需要链在一个链表上,这一点用

是数据指针,指向该 pbuf 管理的数据的起始地址,这里,数据的起始地址可以是紧跟在 pbuf 结构之后的 RAM,也可能是在 ROM上的某个地址,而决定这点的是当前 pbuf 是什么类型的,即

len 字段表示当前

tot_len 表示当前 pbuf 和其后所有 pbuf的有效数据的长度。显然, tot_len 字段是 len 字段与 pbuf 链中随后一个 pbuf 的 tot_len 字段的和;pbuf 链中第一个 pbuf 的 tot_len 字段表示整个数据包的长度,而最后一个 pbuf 的 tot_len字段必和 len 字段相等。

type 字段表示 pbuf 的类型,主要有四种类型: PBUF_RAM、 PBUF_ROM、 PBUF_REF和

字段也表示

示该 pbuf 被引用的次数。初始化一个 pbuf 的时候, ref 字段值被设置为 1,当有其他 pbuf 的 next 指针指向该 pbuf 时,该 pbuf 的 ref 字段值加一。所以,要删除一个 pbuf 时,ref 的值必须为

详细原理见原著:

《 Design and Implementation of the LWIP:

剩余函数

void pbuf_realloc(struct pbuf *p, u16_t size); u8_t pbuf_header(struct pbuf *p, s16_t header_size); void pbuf_ref(struct pbuf *p); u8_t pbuf_free(struct pbuf *p); u8_t pbuf_clen(struct pbuf *p);

等,见:

《嵌入式网络那些事-LwIP协议深度剖析与实战演练》,第7章有比较清楚的解释pbuf数据包各函数的使用。

《LwIP协议栈源码详解》。

一个人的期望值越大,心理承受力就会越小,就越经受不住失败的打击,

LWIP之 pbuf.c 文件学习

相关文章:

你感兴趣的文章:

标签云: