pbuf类型和应用
下面的讨论仅限于RAW API。
按存储方式分类
1. PBUF_RAM
从一般性的Heap中分配。可用空间大小受MEM_SIZE宏控制。可看作一般意义上的动态内存。
用途:
a) 将应用层中的待发送数据复制下来(当使用拷贝发送时)
b) 构造请求类的数据包(ARP,DHCP,DNS,etc)
c) 当发送零拷贝数据时,需要额外的pbuf用于下层协议的协议头
2. PBUF_POOL
驱动使用这种类型的PBUF接收网卡数据包。其数量和大小受PBUF_POOL_SIZE和PBUF_POOL_BUFSIZE这两个宏控制。
默认情况下使用和PBUF_RAM互相独立的缓冲(可更改options使用公共缓冲?)。
当单个PBUF_POOL不满足大小要求时,会分配多个PBUF_POOL并link在一起。
一般用于数据包的接收。
3. PBUF_ROM/REF
当应用程序使用零拷贝选项发送数据时,使用这种类型的pbuf保存待发送数据位置和长度。
可用数量受MEMP_NUM_PBUF控制。
由于这种类型的pbuf只有头部,所以占用空间不大。
需要说明的是,PBUF_POOL和PBUF_ROM/REF这两种类型的pbuf大小和数量是在编译时确定的,所以它们都由lwip的内存池管理代码管着(memp_malloc/memp_free)。
按协议层分类
PBUF_TRANSPORT, PBUF_IP, PBUF_LINK, PBUF_RAW
pbuf类型和应用的更多相关文章
- 内存管理pbuf.c源码解析——LwIP学习
声明:个人所写所有博客均为自己在学习中的记录与感想,或为在学习中总结他人学习成果,但因本人才疏学浅,如果大家在阅读过程中发现错误,欢迎大家指正. 本文自己尚有认为写的不完整的地方,源代码没有完全理清, ...
- 内存管理pbuf.h头文件源码解析——LwIP学习
声明:个人所写所有博客均为自己在学习中的记录与感想,或为在学习中总结他人学习成果,但因本人才疏学浅,如果大家在阅读过程中发现错误,欢迎大家指正. LwIP的内核(core文件夹)文件中pbuf.c是包 ...
- 6、LwIP协议规范翻译——缓冲及内存管理
6.缓冲及内存管理 在一个通信系统中,内存缓冲管理系统必须容纳各种大小的缓冲数据,其范围从包含具有数百个字节的数据的全尺寸TCP段到只有几个字节的短ICMP回复包.此外,为了避免拷贝,应该让数据内容缓 ...
- LWIP network interface 即 LWIP 的 硬件 数据 接口 移植 详解 STM32 以太网数据 到达 的第二站: void ethernetif_input( void * pvParameters )
根据 上一篇 文章 , ETH DMA 数据中断 会 发送 一个信号量 ,我使用 全局 搜索 这个信号量 s_xSemaphore 得到 一下 几个 值 根据 这个 分析 我们找到了 数据 的 ...
- lwip【6】LWIP使用经验
LWIP使用经验 一 LWIP内存管理 LWIP的内存管理使用了2种方式:内存池memp和内存堆mem,如图1所示. 内存池的特点是预先开辟多组固定大小的内存块组织成链表,实现简单,分配和回收速度快, ...
- 【lwip】04-网络数据包流向
目录 前言 4.1 TCPIP分层与lwip数据共享 4.2 协议栈线程模型 4.3 pbuf 结构体 4.3.1 pbuf的标志位flags 4.4 pbuf的类型 4.4.1 PBUF_RAM类型 ...
- 【lwip】06-网络接口层分析
目录 前言 6.1 概念引入 6.2 网络接口层数据概念流图 6.3 网卡收包程序流图 6.4 网卡数据结构 6.4.1 struct netif源码 6.4.2 字段分析 6.4.2.1 网卡链表 ...
- c++中的类型擦除
(原创)c++中的类型擦除 c++11 boost技术交流群:296561497,欢迎大家来交流技术. 关于类型擦除,可能很多人都不清楚,不知道类型擦除是干啥的,为什么需要类型擦除.有必要做个说明,类 ...
- (原创)c++中的类型擦除
c++11 boost技术交流群:296561497,欢迎大家来交流技术. 关于类型擦除,可能很多人都不清楚,不知道类型擦除是干啥的,为什么需要类型擦除.有必要做个说明,类型擦除就是将原有类型消除或者 ...
随机推荐
- learning scala read from console
控制台输入语句: readInt, readDouble, readByte, readShort, readLong, readChar, readBoolean, readLine example ...
- python自动化运维之路06
python中面向对象编程 编程范式: 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条 ...
- [译].Net 4.5 的五项强大新特性
本文原文:Five Great .NET Framework 4.5 Features 译者:冰河魔法师 目录 介绍 特性一:async和await 特性二:Zip压缩 特性三:正则表达式执行超时 特 ...
- 集合list里存储list,要遍历最底层list的对象元素的遍历方法
package com.wtd; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; im ...
- 《Python》 面向对象三大特性之继承
一.继承大纲: 继承和抽象(两个概念) 1.单继承: 语法: 父类.基类.超类 子类.派生类 继承与重用:子类可以使用父类中的名字(变量和方法) 继承与派生:子类在父类的基础上又新创建了自己需要的方法 ...
- (C/C++学习笔记) 十六. 预处理
十六. 预处理 ● 关键字typeof 作用: 为一个已有的数据类型起一个或多个别名(alias), 从而增加了代码的可读性. typedef known_type_name new_type_nam ...
- BadUSB测试记录
0x00 前言 不是很新的东西,其他作者已对此做过研究测试,本文仅用来记录操作过程,保存日志,说明细节. 0x01参考资料 https://github.com/adamcaudill/Psychso ...
- USER 版本与ENG 版本差异
[Description] Android USER 版本与ENG 版本的差异 [Keyword] USER ENG user eng 用户版本 工程版本 差异 [Solution] Goog ...
- Objective-C和Swift混合编程开发
创建混编的Framework工程 第一步:创建target为Framework的工程 打开Xcode6-Beta,菜单栏File—>New—>Project; 创建一个新的工程,工程模板选 ...
- 微信小程序之蓝牙开发(详细读数据、写数据、附源码)
本文将详细介绍微信小程序的蓝牙开发流程(附源码)准备:微信只支持低功耗蓝牙也就是蓝牙4.0,普通的蓝牙模块是用不了的,一定要注意. 蓝牙可以连TTL接到电脑上,再用XCOM调试 一开始定义的变量 va ...