首页 > 其他 > 详细

lwip之四:pbuf

时间:2016-05-11 19:25:04      阅读:458      评论:0      收藏:0      [点我收藏+]

一、Pbuf

pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)

layertype

技术分享技术分享 

 

ØPBUF_RAM 在RAM DATA区域分配

p = (struct pbuf*)mem_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length));

p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset));

offset依赖于layer

技术分享 

 

ØPBUF_POOL 在静态区域分配

p = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL);

p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset)));//1th

......

q->payload = (void *)((u8_t *)q + SIZEOF_STRUCT_PBUF);//2th-->nth,看代码pq有关联

q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED);

PBUF_POOL第一次是有offset(offset>=0)

MEMP_PBUF_POOL是固定分配的,最后一个pool可能有空间浪费,但速度快,一般用在接收/发送数据包的场合。

技术分享 

 

ØPBUF_REF/PBUF_ROM payload由用户赋值指向

p = (struct pbuf *)memp_malloc(MEMP_PBUF);

p->payload = NULL;

代码中PBUF_REF/PBUF_ROM无差异,用户可以对PBUF_ROM做差异化处理。

技术分享 

技术分享 





lwip之四:pbuf

原文:http://www.cnblogs.com/freezlz/p/5483202.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!