lwIP配置宏整理(部分)
目录
一、系统相关
1、NO_SYS (是否拥有操作系统)
2、LWIP_TIMERS (LWIP 定时器)
3、LWIP_TIMERS_CUSTOM (LWIP 用户自定义定时器)
二、内核锁
1、LWIP_MPU_COMPATIBLE (MPU 内存管理单元)
2、LWIP_TCPIP_CORE_LOCKING (TCP 互斥锁)
3、LWIP_TCPIP_CORE_LOCKING_INPUT (TCP 输入锁控制)
4、SYS_LIGHTWEIGHT_PROT (必选项!)
三、内存选项
1、MEM_LIBC_MALLOC (使用C库或者lwIP提供的内存分配机制)
2、MEMP_MEM_MALLOC (内存池的分配选项)
3、MEM_ALIGNMENT (内存字节对齐)
4、MEM_SIZE (lwIP 中的内存堆空间大小)
5、MEMP_OVERFLOW_CHECK (内存池溢出检测)
6、MEMP_SANITY_CHECK (内存池完整性检测)
7、MEM_USE_POOLS (使用内存池)
8、MEM_USE_POOLS_TRY_BIGGER_POOL(当前内存池枯竭时,尝试使用更大的内存池)
9、MEMP_USE_CUSTOM_POOLS (用户定义内存池)
10、LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT (其他地方释放内存)
四、内存池大小相关设置
1、MEMP_NUM_PBUF (内存池中的pbuf数量)
2、MEMP_NUM_RAW_PCB (raw 连接PCBs 的数量)
3、MEMP_NUM_UDP_PCB (UDP 协议控制块数量)
4、MEMP_NUM_TCP_PCB (TCP 协议控制块数量)
5、MEMP_NUM_TCP_PCB_LISTEN (监听TCP连接数)
6、MEMP_NUM_TCP_SEG (TCP段数量)
7、MEMP_NUM_REASSDATA (IP包同时重新组装数量)
8、MEMP_NUM_FRAG_PBUF (同时发送IP片段数量)
9、MEMP_NUM_ARP_QUEUE (同时排队出队等待ARP请求的数量)
10、MEMP_NUM_IGMP_GROUP (多播组数量)
11、MEMP_NUM_SYS_TIMEOUT (同时活跃的超时数)
12、MEMP_NUM_NETBUF (netbuf 结构体数量)
13、MEMP_NUM_NETCONN (netconn 数量)
14、MEMP_NUM_TCPIP_MSG_API (tcpip_msg 数量,用于回调/超时 api的交流)
15、MEMP_NUM_TCPIP_MSG_INPKT (tcpip_msg 数量, 用于处理输入包)
16、MEMP_NUM_NETDB(并行运行 lwip_addrinfo()的数量)
17、MEMP_NUM_LOCALHOSTLIST (本地主机列表中的主机条目数)
18、PBUF_POOL_SIZE(pbuf池中的缓存数量)
19、MEMP_NUM_API_MSG (对各种并发活动调用socket、netconn、tcpip函数的数量)
20、MEMP_NUM_DNS_API_MSG(对netconn_gethostbyname并发活动调用的次数)
21、MEMP_NUM_NETIFAPI_MSG(对象的并发活动调用 netifapi 函数的数量)
一、系统相关
1、NO_SYS (是否拥有操作系统)
- NO_SYS == 1: 使用lwIP而不考虑操作系统(没有线程、信号量、互斥或 mbox)。这意味着不能使用线程api(socket、netconn、即“api”文件夹中的所有内容),只有回调风格的原始api是可用的(你必须小心你自己,你不能在一个场景中操作lwIP函数/结构多次!
2、LWIP_TIMERS (LWIP 定时器)
LWIP_TIMERS == 0:取消对sys_timeout和lwip内部循环计时器的支持。(仍然提供lwip内部循环计时器数组 ,检查NO_SYS_NO_TIMERS 是否与旧版本兼容)
3、LWIP_TIMERS_CUSTOM (LWIP 用户自定义定时器)
LWIP_TIMERS_CUSTOM==1: 用户自己实现定时器。任然包含 timeout .h中的函数原型和lwip内部循环计时器数组,但实现没有。需要用户自己实现以下功能:sys_timeouts_init()、sys_timeout()、sys_untimeout()、 sys_timeouts_mbox_fetch ()
二、内核锁
1、LWIP_MPU_COMPATIBLE (MPU 内存管理单元)
- LWIP_MPU_COMPATIBLE: 启用特殊的内存管理机制,使得lwip能够在MPU(内存保护单元)系统上工作,通过不传递堆栈指针到其他线程(这会降低性能,因为内存是从池中分配的保持它在堆栈上)
2、LWIP_TCPIP_CORE_LOCKING (TCP 互斥锁)
- LWIP_TCPIP_CORE_LOCKING:创建TCPIP线程操作期间持有的全局互斥锁。可被客户端代码锁定,无需更改即可执行lwIP操作进入TCPIP线程使用回调。使用请看 LOCK_TCPIP_CORE()和 UNLOCK_TCPIP_CORE()。互斥锁需要由你的操作系统提供。
3、LWIP_TCPIP_CORE_LOCKING_INPUT (TCP 输入锁控制)
- LWIP_TCPIP_CORE_LOCKING_INPUT:启用LWIP_TCPIP_CORE_LOCKING时,这也让tcpip_input()获取输入包的时候上锁,而不是分配消息并将其传递给 tcpip_thread。注意: 当tcpip_input()被中断调用时,这不会工作!
4、SYS_LIGHTWEIGHT_PROT (必选项!)
- SYS_LIGHTWEIGHT_PROT==1:启用任务间保护,为某些关键区域的缓冲区分配与释放 和 内存分配和释放。
注意:当从多个上下文中使用lwIP时,这是必需的!
三、内存选项
1、MEM_LIBC_MALLOC (使用C库或者lwIP提供的内存分配机制)
- MEM_LIBC_MALLOC==1:使用c库提供的malloc/free/realloc 而不是lwip内部的内存分配。
2、MEMP_MEM_MALLOC (内存池的分配选项)
- MEMP_MEM_MALLOC==1:使用mem_malloc/mem_free代替lwip池分配器。和MEM_LIBC_MALLOC搭配使用,但是处理时要注意执行速度(堆分配比内存池分配要慢得多)和中断的使用。(特别是当你的netif驱动程序从中断为收到的帧分配PBUF_POOL pbufs 时。注意:目前,这将堆应用于所有内存池(包括私有内存池,不仅仅是定义memp_std.h中的内存池)!
3、MEM_ALIGNMENT (内存字节对齐)
- MEM_ALIGNMENT:应该设置为CPU的对齐
- 4字节对齐 #define MEM_ALIGNMENT 4
- 2字节对齐 #define MEM_ALIGNMENT 2
4、MEM_SIZE (lwIP 中的内存堆空间大小)
- MEM_SIZE:堆内存的大小。如果应用程序将发送需要复制的数据很多,这个应该设置成比较大的值。
5、MEMP_OVERFLOW_CHECK (内存池溢出检测)
- MEMP_OVERFLOW_CHECK: memp溢出保护保留一个可配置的字节,并且在每个memp前后填充
- MEMP_OVERFLOW_CHECK == 0没有检查
- MEMP_OVERFLOW_CHECK == 1检查每个被释放的元素
- MEMP_OVERFLOW_CHECK >= 2每次检查每个池中的每个元素
- memp_malloc()或memp_free()被调用(有用但很慢!)
6、MEMP_SANITY_CHECK (内存池完整性检测)
- MEMP_SANITY_CHECK==1:在每个memp_free()生成后运行完整性检查,来确保链表中没有循环
7、MEM_USE_POOLS (使用内存池)
- MEM_USE_POOLS==1:提供一种内存池的分配方式。当mem_malloc被调用时,会返回一个最小的内存池所需要的长度
- 使用这个 MEMP_USE_CUSTOM_POOLS 也需要使能
8、MEM_USE_POOLS_TRY_BIGGER_POOL(当前内存池枯竭时,尝试使用更大的内存池)
- 当前内存池枯竭时,将尝试使用其他更大的内存池
- 注意:可能会浪费内存,但是可以提高系统的稳定性
9、MEMP_USE_CUSTOM_POOLS (用户定义内存池)
- MEMP_USE_CUSTOM_POOLS==1: 使用用户额外定义的内存池,
- 如果使用了,必须包含lwippools.h文件
10、LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT (其他地方释放内存)
- 这个宏定义设置为 1 可以从中断(或其它需要立即响应的信号中) 释放 PBUF_RAM 的pbufs
- 设置为1 时, mem_malloc 会被 semaphore 与 SYS_ARCH_PROTECT保护 mem_free只会使用SYS_ARCH_PROTECT
- 如果不希望这样,在拥有操作系统的情况下,卡可以使用
- pbuf_free_callback(p);
mem_free_callback(m);
四、内存池大小相关设置
1、MEMP_NUM_PBUF (内存池中的pbuf数量)
- 适用于 PBUF_ROM 和 PUBF_PEF 类型的pbuf
- 如果应用发送很多从ROM中的数据,这个需要设置高一点
2、MEMP_NUM_RAW_PCB (raw 连接PCBs 的数量)
- 需要 LWIP_RAW 选项支持(即:不带操作系统的LWIP的api)
3、MEMP_NUM_UDP_PCB (UDP 协议控制块数量)
- 需要 LWIP_UDP 选项支持
- 每一个活跃的UDP 连接数
4、MEMP_NUM_TCP_PCB (TCP 协议控制块数量)
- 需要 LWIP_TCP 选项支持
- 每一个活跃的TCP 连接数
5、MEMP_NUM_TCP_PCB_LISTEN (监听TCP连接数)
- 需要 LWIP_TCP 选项支持
- 监听连接连接数数量
6、MEMP_NUM_TCP_SEG (TCP段数量)
- 需要 LWIP_TCP 选项支持
- 同时排队的TCP段数量
7、MEMP_NUM_REASSDATA (IP包同时重新组装数量)
8、MEMP_NUM_FRAG_PBUF (同时发送IP片段数量)
9、MEMP_NUM_ARP_QUEUE (同时排队出队等待ARP请求的数量)
10、MEMP_NUM_IGMP_GROUP (多播组数量)
- 需要 LWIP_IGMP 选项支持
- 多播组数量
11、MEMP_NUM_SYS_TIMEOUT (同时活跃的超时数)
12、MEMP_NUM_NETBUF (netbuf 结构体数量)
13、MEMP_NUM_NETCONN (netconn 数量)
14、MEMP_NUM_TCPIP_MSG_API (tcpip_msg 数量,用于回调/超时 api的交流)
15、MEMP_NUM_TCPIP_MSG_INPKT (tcpip_msg 数量, 用于处理输入包)
16、MEMP_NUM_NETDB(并行运行 lwip_addrinfo()的数量)
17、MEMP_NUM_LOCALHOSTLIST (本地主机列表中的主机条目数)
18、PBUF_POOL_SIZE(pbuf池中的缓存数量)
19、MEMP_NUM_API_MSG (对各种并发活动调用socket、netconn、tcpip函数的数量)
20、MEMP_NUM_DNS_API_MSG(对netconn_gethostbyname并发活动调用的次数)
21、MEMP_NUM_NETIFAPI_MSG(对象的并发活动调用 netifapi 函数的数量)
22、MEMP_NUM_PBUF (内存池中pbuf的数量,影响PBUF_ROM and PBUF_REF类型内存池)
23、MEMP_NUM_RAW_PCB(RAW_PCB的数量)
24、MEMP_NUM_REASSDATA(同时排队等待组装的IP数据包的数量)
25、MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA(并发活动调用setsocket或者getsocket的数量)
26、MEMP_NUM_SYS_TIMEOUT(同时活动超时的数目)
27、MEMP_NUM_TCP_PCB(TCP控制块数量)
28、MEMP_NUM_TCP_PCB_LISTEN(监听的tcp连接数量)
29、MEMP_NUM_TCP_SEG(同时排队tcp段数量)
30、MEMP_NUM_TCPIP_MSG_API(struct tcpip_msg 的数量,用于回调/超时api的使用)
31、MEMP_NUM_TCPIP_MSG_INPKT(struct tcpip_msg的数量,用于传入数据包)
32、MEMP_NUM_UDP_PCB(UDP控制块数量)
33、MEMP_OVERFLOW_CHECK(内存池填充检测)
34、MEMP_SANITY_CHECK(在memp_free后进行检测,确保链表没有循环)
35、MEMP_STATS(使能memp.c pool 状态)
36、MEMP_USE_CUSTOM_POOLS(使用用户自定义的内存池)
lwIP配置宏整理(部分)相关推荐
- Linux kernel中常见的宏整理
0x00 宏的基本知识 // object-like #define 宏名 替换列表 换行符 //function-like #define 宏名 ([标识符列表]) 替换列表 换行符 替换列表和标识 ...
- python对文件重命名快捷键_Pycharm快捷键配置详细整理
1.主题 毫无疑问Pycharm是一个具有强大快捷键系统的IDE,这就意味着你在Pycharm中的任何操作,例如打开一个文件.切换编辑区域等,都可以通过快捷键来实现.使用快捷键不仅能提高操作速度,看起 ...
- 【LaTex】利用ins文件和dtx文件生成cls或sty文件,latex宏包的生成与创建方法;配置宏包文件的方法,latex宏包文件放置目录
一.宏包文件无法找到 在编译tex文件时,如果宏包文件并不在配置目录中,就会发出类似[LaTeX Error: File `pageno.sty' not found.]的错误. 二.解决方法就是自己 ...
- 华为基本配置命令(整理)
华为基本配置命令(整理) 版权仅供原作者所有,感谢提供资料的原作者! 一.单交换机VLAN划分 命令解释 system-view 进入系统视图 quit 退到系统视图 undo vlan 20 删除v ...
- 国服WLK野德德鲁伊专用宏整理:野德新手练级副本宏
国服WLK野德德鲁伊专用宏整理:野德新手练级副本宏 野德专用宏,节省技能栏,适用国服3.22 如果野德不用宏..请给我三只手.. 分享一下自己用的几个宏,适合野德新手.并诚心求高手改进. 1.横扫宏. ...
- SourceInsight 4.0 之四 项目配置(库文件引入、配置宏添加、快捷键修改等)
问题 在创建完成 Source Insight 工程后,我们就可以使用绝大部分功能.但是如果用的多了就会发现,其与我们真正的 IDE(通常我们仅用 Source Insight 编辑代码,实际的编 ...
- centos 7.x systemd service 配置方法整理
一.存放路径 /etc/systemd/system 二.service配置整理 2.1 zookeeper.service [Unit] Description=ZooKeeper Service ...
- 黑苹果安装四叶草配置宏碁ec 471g
配置教程发布在github 本人电脑宏碁ec 471g 电脑和e1 471g和v3 471g差不多的配置 bios可以通用 可以稍微修改下通用 git地址https://github.com/holo ...
- 宏碁非凡 Go2023参数配置 宏碁非凡 Go评测
屏幕方面,这款笔记本搭载 16 英寸 3200x2000 分辨率 OLED 屏,获得德国莱因 TÜV 显示认证,拥有高达 500 尼特的最高亮度.100% DCI-P3 广色域及 VESA Displ ...
- IntelliJ IDEA 常用设置(配置)吐血整理。首次安装必需
idea 很强大,但是初次安装默认的有很多设置并不是满足我们开发的需要. 以前经常一安装就要捣鼓很久,为此吐血整理初次安装设置 一.切换主题(配色方案) 作用:切换自己喜欢的主题 操作:File &g ...
最新文章
- jQuery.append()、jQuery.html()存在的XSS漏洞
- 给.net程序打内存补丁-转
- FreeMarker template error: The following has evaluated to null or missing
- Qt Creator使用Clang工具
- IEDA中彻底删除项目
- 控件属性、事件持久化(转)
- IP头、TCP头、UDP头详解以及定义
- Python中转换角度为弧度的radians()方法
- NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证
- MSDN 论坛好帮手3月首发
- GIT学习笔记1--基本使用
- Vquery PHP 简单爬虫类
- 互融云小额贷款系统开发:全流程管理的软件开发解决方案
- IOS逆向-ASLR
- H5API ---(Web存储-拖拽事件-通信-websocket-geolocation)
- 基于Javafx制作的随机抽签软件
- springboot--入门程序实现CRUD操作
- jquery设置ajax全局参数
- 高等数学学习笔记——第六十八讲——隐函数存在定理
- LCM液晶显示模组是什么,液晶显示模块有几种类型呢
热门文章
- 用Apache POI提取Word文本
- cabbage liunx学习之路之用户与用户组管理篇
- 带你玩转区块链--区块链面试问题及答案-第四章【总结篇】
- Variable used in lambda expression should be final or effectively final报错解决方案
- 微信公众号如何上传html5,微信平台公众号怎么上传视频? 视频支持哪些格式
- 云原生服务网格 Istio 1.4 部署指南
- 树莓派浏览器this site can‘t be reached
- Can‘t connect to any repository: 的解决办法, 在Push代码,提交代码到代码仓库的时候,提示不能连接到该代码仓库
- 40年开店近4万家,麦当劳老大地位恐不保!看看人家这心机!
- 车辆违章查询接口文档