我是靠谱客的博主 坚定夕阳,最近开发中收集的这篇文章主要介绍SylixOS 网络协议栈lwip介绍1-----pbuf结构,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    SylixOS网络协议栈使用目前非常流行的嵌入式TCP/IP协议栈lwip。lwip是瑞典计算机科学院(SICS)的AdamDunkels 开发的一个小型开源的TCP/IP协议栈。lwip特点是对RAM与ROM的占用非常少,只需十几KB的RAM和40K左右的ROM就可以运行,非常适合嵌入式系统使用。

pbuf结构

pbuf是lwip中用来表示数据包的结构体,数据包在协议栈各层的流动也是通过pbuf来实现的,基本结构如下:

/** Main packet buffer struct */
struct pbuf {
  struct pbuf *next;                          /* 下一个pbuf结构                                              */
  void *payload;                              /* 实际数据起始地址                                            */
  u16_t tot_len;                              /* pbuf链总长度                                                    */
  u16_t len;                                  /* 当前pbuf长度                                                   */
  u8_t type_internal;                         /* pbuf类型                                                             */
  u8_t flags;
  LWIP_PBUF_REF_T ref;                        /* 初始化为1,pbuf->next指向自己时ref加1  */
  u8_t if_idx;
  void *if_out; 
};

pbuf的字段type_internal表示pbuf类型,lwip中有四种类型PBUF_RAM、PBUF_ROM、PBUF_REF和PBUF_POOL:

(1)PBUF_RAM类型的pbuf结构是一块很大的内存空间,内存首部是pbuf结构,实际数据接在后面,发送数据时常使用这种类型。如图:

pbuf的字段type_internal表示pbuf类型,lwip中有四种类型PBUF_RAM、PBUF_ROM、PBUF_REF和PBUF_POOL:

(1)PBUF_RAM类型的pbuf结构是一块很大的内存空间,内存首部是pbuf结构,实际数据接在后面,发送数据时常使用这种类型。如图:

(2)PBUF_POOL类型是由多个pbuf结构组合而成,使用next字段将这些pbuf结构连接起来。其中tot_len表示此节点和next之后所有节点的长度和,len表示当前节点的数据长度。接收数据时常使用这类型的pbuf结构。如图:

(3)PBUF_REF与PBUF_ROM类似,pbuf结构是单独的一块内存空间,而data是另一块内存,二者并不相连,如图:


Lwip协议栈使用pbuf结构在各层之间传递数据包,通过移动payload指针的方式在数据中添加报文头和剔除报文头,从而实现“零拷贝”机制,提高报文处理效率。

最后

以上就是坚定夕阳为你收集整理的SylixOS 网络协议栈lwip介绍1-----pbuf结构的全部内容,希望文章能够帮你解决SylixOS 网络协议栈lwip介绍1-----pbuf结构所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部