关于LWIP使用NAT功能报sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty

问题现象:LWIP使用NAT功能报sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty,发现报错的地方是failed at line 190 in LwIP\src\core\timeouts.c

问题分析:

1、仿真进入memp_malloc函数,查看memp_tab []的值和传入的type的值,MEMP_SYS_TIMEOUT作为参数传进来的话,type是11,然后观察memp_tab[]里面对应的值,然后就发现程序执行到memp_tab = memp_alloc->next;
这句的时候,memp_tab的值就变成了NULL,所以执行memp_malloc(MEMP_SYS_TIMEOUT)就分配为NULL了。
2、追踪到了memp_std.h里面的一个定义:
#if NO_SYS==0
LWIP_MEMPOOL(SYS_TIMEOUT,    MEMP_NUM_SYS_TIMEOUT,   sizeof(struct sys_timeo),      "SYS_TIMEOUT")
#endif /* NO_SYS==0 */
#define LWIP_NUM_SYS_TIMEOUT_INTERNAL   (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_NUM_TIMEOUTS + (LWIP_IPV6 * (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD)))

问题原因:
1、系统允许同时存在的timeouts的个数,初始值是8,memp_malloc(MEMP_SYS_TIMEOUT)时无法获取memory

2、memp_malloc(MEMP_SYS_TIMEOUT);此时就申请不到内存

问题解决:

将LWIP_NUM_SYS_TIMEOUT_INTERNAL加上LWIP_NAT(值为1)

问题说明:

1、LWIP使用2.1.0版本

2、使用STM32F407硬件平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值