tilblackout 发表于 2023-9-18 16:52:35

LWIP卡死在select的问题

系统使用了FreeRTOS和LwIP,程序有概率卡死在select函数中。

我的程序使用了双网卡,一个使用PPP拨号访问外网,一个使用以太网。我在两个任务中有调用select,一个select用来监听所有socket的读fd,一个是在往以太网写数据的时候,监听写它的fd,如果返回失败表示lwip现在可能内存不够就不写了。
跑了一晚上,一般都是七八个小时后会卡死,卡死的时候,两个任务都卡在select函数里面。请问如何定位里面的问题,也不太好复现,似乎就是select不是可重入函数。


我发现了两个宏定义:LWIP_NETCONN_SEM_PER_THREAD和LWIP_NETCONN_FULLDUPLEX,打开这两个宏定义可以避免这个情况吗?

谢谢。

eric2013 发表于 2023-9-18 21:13:38

select重入需要多任务执行,你的LwIP多任务支持是不是没有移植好。

tilblackout 发表于 2023-9-19 10:43:21

eric2013 发表于 2023-9-18 21:13
select重入需要多任务执行,你的LwIP多任务支持是不是没有移植好。

移植的是NXP SDK中的FreeRTOS LwIP例程,没加select的时候也跑过两三天,所以多任务应该没问题。就是select这个函数用着有问题,不知道是否和LWIP_NETCONN_SEM_PER_THREAD、LWIP_NETCONN_FULLDUPLEX两个宏定义有关系。

eric2013 发表于 2023-9-20 09:13:35

tilblackout 发表于 2023-9-19 10:43
移植的是NXP SDK中的FreeRTOS LwIP例程,没加select的时候也跑过两三天,所以多任务应该没问题。就是sele ...

说明底层还是有问题,得排查下了

msr06rr 发表于 2023-9-20 09:59:27

或者参考 esp-idf 中的移植呗,人家 Freertos + lwip 已经跑了 N 多年了

tilblackout 发表于 2023-9-20 15:56:13

msr06rr 发表于 2023-9-20 09:59
或者参考 esp-idf 中的移植呗,人家 Freertos + lwip 已经跑了 N 多年了

LwIP单网卡跑问题不大的,我这个大概率是双网卡出现的问题,我也有看到说LwIP对双网卡支持不太好。
页: [1]
查看完整版本: LWIP卡死在select的问题