目录
3、LWIP_TIMERS_CUSTOM (LWIP 用户自定义定时器)
1、LWIP_MPU_COMPATIBLE (MPU 内存管理单元)
2、LWIP_TCPIP_CORE_LOCKING (TCP 互斥锁)
3、LWIP_TCPIP_CORE_LOCKING_INPUT (TCP 输入锁控制)
1、MEM_LIBC_MALLOC (使用C库或者lwIP提供的内存分配机制)
5、MEMP_OVERFLOW_CHECK (内存池溢出检测)
6、MEMP_SANITY_CHECK (内存池完整性检测)
8、MEM_USE_POOLS_TRY_BIGGER_POOL(当前内存池枯竭时,尝试使用更大的内存池)
9、MEMP_USE_CUSTOM_POOLS (用户定义内存池)
10、LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT (其他地方释放内存)
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连接数)
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 选项支持
- 多播组数量