我正在尝试使用freertos中的lwip堆栈进行基于UDP的多个套接字通信。我的第一个问题是,套接字创建失败,因为lwip_socket
调用了netconn_new
,其中包含对TCPIP_APIMSG(&msg)
的调用,该调用返回错误。我发现TCPIP_APIMSG(&msg)
中的错误是由于sys_mbox_valid(&mbox)
返回false而产生的。
我认识到创建了比lwip配置变量memp_n_udp_pcb
允许的UDP套接字更多的UDP套接字后,我可以解决这个问题。我刚刚增加memp_n_udp_pcb
。
现在我遇到了lwip_sendto
在发送大约300个数据包后停止工作的问题。同样,TCPIP_APIMSG(&msg)
中的无效mbox似乎也是原因。 lwip_sendto
调用netconn_send
,调用TCPIP_APIMSG(&msg)
,由于mbox无效而返回错误。
我只是尝试使用带有freertos的lwip堆栈,但我没有使用lwip堆栈的实现细节的经验。我不知道无效的mbox是什么意思以及如何解决问题。
我希望有人可以向我解释这里出了什么问题。
是否还有其他设置(memp_n_udp_pcb
除外)当使用超过预定义数量的4个UDP套接字时我必须更改?
为什么lwip_sendto
在没有问题的情况下发送几百个数据包后会失败?