目录

一、系统相关

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配置宏整理(部分)相关推荐

  1. Linux kernel中常见的宏整理

    0x00 宏的基本知识 // object-like #define 宏名 替换列表 换行符 //function-like #define 宏名 ([标识符列表]) 替换列表 换行符 替换列表和标识 ...

  2. python对文件重命名快捷键_Pycharm快捷键配置详细整理

    1.主题 毫无疑问Pycharm是一个具有强大快捷键系统的IDE,这就意味着你在Pycharm中的任何操作,例如打开一个文件.切换编辑区域等,都可以通过快捷键来实现.使用快捷键不仅能提高操作速度,看起 ...

  3. 【LaTex】利用ins文件和dtx文件生成cls或sty文件,latex宏包的生成与创建方法;配置宏包文件的方法,latex宏包文件放置目录

    一.宏包文件无法找到 在编译tex文件时,如果宏包文件并不在配置目录中,就会发出类似[LaTeX Error: File `pageno.sty' not found.]的错误. 二.解决方法就是自己 ...

  4. 华为基本配置命令(整理)

    华为基本配置命令(整理) 版权仅供原作者所有,感谢提供资料的原作者! 一.单交换机VLAN划分 命令解释 system-view 进入系统视图 quit 退到系统视图 undo vlan 20 删除v ...

  5. 国服WLK野德德鲁伊专用宏整理:野德新手练级副本宏

    国服WLK野德德鲁伊专用宏整理:野德新手练级副本宏 野德专用宏,节省技能栏,适用国服3.22 如果野德不用宏..请给我三只手.. 分享一下自己用的几个宏,适合野德新手.并诚心求高手改进. 1.横扫宏. ...

  6. SourceInsight 4.0 之四 项目配置(库文件引入、配置宏添加、快捷键修改等)

    问题   在创建完成 Source Insight 工程后,我们就可以使用绝大部分功能.但是如果用的多了就会发现,其与我们真正的 IDE(通常我们仅用 Source Insight 编辑代码,实际的编 ...

  7. centos 7.x systemd service 配置方法整理

    一.存放路径 /etc/systemd/system 二.service配置整理 2.1 zookeeper.service [Unit] Description=ZooKeeper Service ...

  8. 黑苹果安装四叶草配置宏碁ec 471g

    配置教程发布在github 本人电脑宏碁ec 471g 电脑和e1 471g和v3 471g差不多的配置 bios可以通用 可以稍微修改下通用 git地址https://github.com/holo ...

  9. 宏碁非凡 Go2023参数配置 宏碁非凡 Go评测

    屏幕方面,这款笔记本搭载 16 英寸 3200x2000 分辨率 OLED 屏,获得德国莱因 TÜV 显示认证,拥有高达 500 尼特的最高亮度.100% DCI-P3 广色域及 VESA Displ ...

  10. IntelliJ IDEA 常用设置(配置)吐血整理。首次安装必需

    idea 很强大,但是初次安装默认的有很多设置并不是满足我们开发的需要. 以前经常一安装就要捣鼓很久,为此吐血整理初次安装设置 一.切换主题(配色方案) 作用:切换自己喜欢的主题 操作:File &g ...

最新文章

  1. jQuery.append()、jQuery.html()存在的XSS漏洞
  2. 给.net程序打内存补丁-转
  3. FreeMarker template error: The following has evaluated to null or missing
  4. Qt Creator使用Clang工具
  5. IEDA中彻底删除项目
  6. 控件属性、事件持久化(转)
  7. IP头、TCP头、UDP头详解以及定义
  8. Python中转换角度为弧度的radians()方法
  9. NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证
  10. MSDN 论坛好帮手3月首发
  11. GIT学习笔记1--基本使用
  12. Vquery PHP 简单爬虫类
  13. 互融云小额贷款系统开发:全流程管理的软件开发解决方案
  14. IOS逆向-ASLR
  15. H5API ---(Web存储-拖拽事件-通信-websocket-geolocation)
  16. 基于Javafx制作的随机抽签软件
  17. springboot--入门程序实现CRUD操作
  18. jquery设置ajax全局参数
  19. 高等数学学习笔记——第六十八讲——隐函数存在定理
  20. LCM液晶显示模组是什么,液晶显示模块有几种类型呢

热门文章

  1. 用Apache POI提取Word文本
  2. cabbage liunx学习之路之用户与用户组管理篇
  3. 带你玩转区块链--区块链面试问题及答案-第四章【总结篇】
  4. Variable used in lambda expression should be final or effectively final报错解决方案
  5. 微信公众号如何上传html5,微信平台公众号怎么上传视频? 视频支持哪些格式
  6. 云原生服务网格 Istio 1.4 部署指南
  7. 树莓派浏览器this site can‘t be reached
  8. Can‘t connect to any repository: 的解决办法, 在Push代码,提交代码到代码仓库的时候,提示不能连接到该代码仓库
  9. 40年开店近4万家,麦当劳老大地位恐不保!看看人家这心机!
  10. 车辆违章查询接口文档