返回

LWIP之 pbuf.c 文件学习

发布时间:2023-01-01 23:52:26 303
# 数据

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;
};

LWIP之 pbuf.c 文件学习_字段

各字段说明:

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协议栈源码详解》。

 

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
4G模块 串口编程流程 2023-01-01 23:16:49