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