如何深入理解LWIP的pbuf.c文件实现原理?

2026-05-26 02:081阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计628个文字,预计阅读时间需要3分钟。

如何深入理解LWIP的pbuf.c文件实现原理?

LWIP中的pbuf.c文件学习Pbuf数据结构struct pbuf结构体定义如下:cstruct pbuf { struct pbuf *next; // 指向下一个pbuf结构体 void *payload; // 数据载荷 u16_t tot_len; // 总长度 u16_t len; // 当前长度 u8_t type; // 类型 u8_t flags; // 标志 u16_t ref; // 引用计数};各字段说明:- next:指向下一个pbuf结构体,用于链表形式组织多个pbuf。- payload:指向实际数据载荷的指针。- tot_len:pbuf的总长度。- len:当前pbuf的长度。- type:pbuf的类型。- flags:pbuf的标志位,用于控制pbuf的行为。- ref:pbuf的引用计数,用于实现pbuf的引用计数机制。

如何深入理解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协议栈源码详解》。

本文共计628个文字,预计阅读时间需要3分钟。

如何深入理解LWIP的pbuf.c文件实现原理?

LWIP中的pbuf.c文件学习Pbuf数据结构struct pbuf结构体定义如下:cstruct pbuf { struct pbuf *next; // 指向下一个pbuf结构体 void *payload; // 数据载荷 u16_t tot_len; // 总长度 u16_t len; // 当前长度 u8_t type; // 类型 u8_t flags; // 标志 u16_t ref; // 引用计数};各字段说明:- next:指向下一个pbuf结构体,用于链表形式组织多个pbuf。- payload:指向实际数据载荷的指针。- tot_len:pbuf的总长度。- len:当前pbuf的长度。- type:pbuf的类型。- flags:pbuf的标志位,用于控制pbuf的行为。- ref:pbuf的引用计数,用于实现pbuf的引用计数机制。

如何深入理解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协议栈源码详解》。