问题描述
我使用的是带有 LWIP v 2.1.2 的 nucleo f429zi。文档指出,对于 TX 缓冲区,应该使用 PBUF_RAM。在我的情况下,整个 LWIP 堆栈在 28 次发送消息后冻结。当我将 pbuf 类型更改为 PBUF_POOL 时,一切都像魅力一样。虽然在文档中写到这种类型应该用于 RX 缓冲区。 这是我对udp回调函数的实现
void
udp_descserver_receive_callback(void *arg,struct udp_pcb *upcb,struct pbuf *p,const ip_addr_t *addr,u16_t port) {
uint8_t triesNumber = 0;
err_t error;
udp_connect(upcb,addr,port);
pbuf_free(p);
p = NULL;
p = pbuf_alloc(PBUF_TRANSPORT,sizeof(PING_INFO),PBUF_POOL);
if(p != NULL) {
pbuf_take(p,&pingInfo,sizeof(PING_INFO));
do {
error = udp_send(upcb,p);
triesNumber++;
} while (error && triesNumber < RESEND_TRIES);
}
pbuf_free(p);
udp_disconnect(upcb);
}
我的问题是,为什么与文档相反的方法有效。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)