lwip之四:pbuf

一、Pbuf

看pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)

分layer和type

Ø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,看代码p和q有关联

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做差异化处理。

来自为知笔记(Wiz)

时间: 2024-08-02 22:01:16

lwip之四:pbuf的相关文章

ALIENTEK 战舰ENC28J60 LWIP和UIP补充例程(LWIP WEB有惊喜)

前面的话:自从接触网络模块,到现在有一阵子时间了,未来必定是网络的世界.学一些网络方面的知识是有必要的.我们ALINTEK 推出的ENC28J60网络模块块作为入门还是不错的.详细见此贴:http://www.openedv.com/posts/list/9355.htm.时间对于一个开发人员是很宝贵的,如何快速应用是我们做技术的,都想要的.废话不多说了.因为主要集中在怎么应用所以有些细节可能不是正确的,这个需要大家去质疑,去验证. 一.LWIP的应用1.什么是LWIP?lwip是瑞典计算机科学

lwip 内存配置和使用,以及 如何 计算 lwip 使用了多少内存?

/** * 内存配置 * suozhang 2019年9月6日20:25:48 参考 <<LwIP 应用开发实战指南>> 野火 第5章 LwIP 的内存管理 * * 动态内存池(POOL): 申请大小必须是指定固定大小字节的值(如4.8.16 等等),系统将所有可用区域以 * 固定大小的字节单位进行划分,然后用单链表将所有空闲内存块连接起来.链表中所有节 * 点大小相同,分配,释放都非常简单. * * 动态内存堆(heap)又可以分为两种:一种是 C 标准库自带的内存管理策略, *

LwIP协议栈(1):简介与pbuf

概述 Lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈. LwIP是Light Weight (轻型)IP协议,有无操作系统的支持都可以运行.LwIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用,它只需十几KB的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式系统中使用.[1] LwIP协议栈主要关注的是怎么样减少内存的使用和代码的大小,这样就可以让lwIP适用于资源有限的小型平台例如嵌入式系统

lwip Packet buffers (PBUF) API 操作 集合

struct pbuf *  pbuf_alloc (pbuf_layer layer, u16_t length, pbuf_type type)   struct pbuf *  pbuf_alloc_reference (void *payload, u16_t length, pbuf_type type)   struct pbuf *  pbuf_alloced_custom (pbuf_layer l, u16_t length, pbuf_type type, struct pb

lwIP RAW_API

lwIP RAW TCP/IP接口 作者: Adam Dunkels, Leon Woestenberg, Christiaan Simons lwIP为使用TCP/IP协议通信的应用程序编程提供了两种接口接口(APIs): * 低层次的称之为"core" / "callback" 或者 "raw" API * 高层次的称之为"sequential" API lwIP "sequential" API为使用

LWIP裸机环境下实现TCP与UDP通讯

前面移植了LWIP,并且简单的实用了DHCP的功能,今天来使用一下实际的数据通讯的功能 首先是实现TCP客户端,我先上代码 #ifndef __TCP_CLIENT_H_ #define __TCP_CLIENT_H_ #include "network.h" //连接状态 enum tcp_client_states { ES_NONE = 0, ES_RECEIVED, //接收到了数据 ES_CLOSING //连接关闭 }; //TCP服务器状态 struct tcp_clie

stm32使用LWIP实现DHCP客户端

LWIP是一款开源的嵌入式网络协议栈,支持的功能很多,而且能在多任务环境下和单任务裸机环境下跑,今天说说他的移植过程,芯片为STM32,网卡为ENC28J60,无操作系统 首先下载LWIP的源代码,我下载的是1.4.1的源码,下载后解压,文件结构如图 将这四个目录中的文件全部拷贝到工程中,API是一些socket通讯的接口,需要在多任务的环境下实现,core里面存放的内核源码,我们主要使用IPV4,include目录下是需要包含的目录,lwip只要求我们包含include目录,里面的内层目录会自

lwip socket探秘之accept

一个基本的socket建立顺序是 Server端: socket() bind() listen() accept() recv() Client端: socket() connect() send() 本文着重介绍Server端的accept()过程. 上一篇我们已经分析了listen()过程,listen()过程新建了pcb并把它放到了tcp_listen_pcbs这个链表里. 接下来,Client端通过Server绑定的地址和端口号(通过bind绑定),给Server发包.Server收到

LwIP学习笔记——STM32 ENC28J60移植与入门

0.前言 去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一详解个别部分只能点到为止. [本文要点] [1]不带操作系统的LwIP移植,LwIP版本为1.4.1. [2]MCU为STM32F103VE,网卡为ENC28J60. [3]移植过程重点描述ethernetif.c和LwIP宏配置等. [4]一个简单的TCP echo例子. [5]力求简单,没有DHCP功能,甚至没有