lwIP配置宏整理(部分)

6 篇文章 23 订阅

目录

一、系统相关

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(使用用户自定义的内存池)

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的猫丿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值