LwIP之pbuf

pbuf的结构


|            next       |            指向链表上的下一个pbuf      

|         payload    |            指向pbuf管理的数据的起始地址,可以是紧跟在pbuf后的RAM,也可以是ROM上的某个地址,取决于pbuf是什么类型

|             len        |            当前pbuf中的有效数据长度

|             tot_len   |           当前pbuf和其后所有pbuf的有效数据长度

|       flags   |      ref      |                     flags(4位)表示pbuf的类型,    ref(4位)表示被引用的次数

|  Room for packet headers    |

|                data                     |

LwIP根据分配的位置定义了pbuf的三种类型:

1.PBUF_POOL -->内存池分配,  

2.PBUF_RAM  -->动态分配,之前讲过的通过内存堆,也就是Heap分配。

3.PBUF_ROM   -->没有内存空间给user loader使用,只能在发送常量时被使用(it can be used only  for sending constant data)

主要区别:

  在接收数据包时,合适的pbuf类型是PBUF_POOL,在极短的时间内可以分配到。

  在发送数据包时,一般采用PBUF_RAM。

  PBUF_ROM在申请的时候只分配相应的pbuf的包头,而不申请数据区空间。


PBUF_POOL和PBUF_ROM删除用memp_free( )

PBUF_RAM删除使用mem_free( )

pbuf形成了链表,只有当ref=1的时候,该pbuf才能被删除。在pbuf创建的时候ref被初始化为1,所以在中间的pbuf是不能被删除的,也就是只有链首的Pbuf能被删除。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值