取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
zynqdiouf
Visitor
Visitor
2,887 次查看
注册日期: ‎06-08-2016

lwIP netif: 'unable to alloc pbuf in recv_handler' message and 网络通讯异常

情况:

     用Lwip作为客户端,每秒发送业务数据到PC服务端,服务端会回复信息标记。然后在工作n(n < 4)小时以后,在终端调试助手会显示

'unable to alloc pbuf in recv_handler' 

'unable to alloc pbuf in recv_handler' 

'unable to alloc pbuf in recv_handler' 

然后调试发现下面程序中p返回值为0:

 

"pbuf.c"文件中

struct pbuf *
pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)
{

...

    p = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL);
    LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc: allocated pbuf %p\n", (void *)p));
    if (p == NULL) {
      PBUF_POOL_IS_EMPTY();
      return NULL;
    }

...

}

 

查阅xilinx网站发现有类似情况,但没有看懂如何解决,如下两条参考链接:

https://forums.xilinx.com/t5/Embedded-Processor-System-Design/lwIP-netif-unable-to-alloc-pbuf-in-recv-handler-message/td-p/743941

 

https://forums.xilinx.com/t5/Embedded-Processor-System-Design/lwIP-netif-unable-to-alloc-pbuf-in-recv-handler-message/m-p/752919#M19351

 

请问如何解决或调试这个问题。

 

 

 

0 项奖励
7 回复数
longley
Xilinx Employee
Xilinx Employee
2,814 次查看
注册日期: ‎04-15-2011

@zynqdiouf

通常碰到的这类错误,是指pbuf数量不够处理接收的packets。

你可以试试把BSP里的lwIP的下面几个参数增大,你贴的链接里,指的也是这几个参数。

Capture.PNG

 

Thanks,

Longley


------------------------------------------------------------------------------------------------

Don’t forget to reply, kudo, and accept as solution.

If starting with Versal take a look at our Versal Design Process Hub and our
Versal Blogs

------------------------------------------------------------------------------------------------
0 项奖励
zhxqiao
Newbie
Newbie
1,849 次查看
注册日期: ‎01-03-2020

按照相关设置,没有作用,刚生成的 udp client 几分钟之后就会有这个打印信息。

0 项奖励
liyj
Visitor
Visitor
1,059 次查看
注册日期: ‎03-11-2021

这个设置是必要的,你可以看看是不是指针pbuf没有及时释放掉

0 项奖励
H-voyager
Visitor
Visitor
835 次查看
注册日期: ‎10-28-2020

请问您这个问题解决了吗。
0 项奖励
H-voyager
Visitor
Visitor
832 次查看
注册日期: ‎10-28-2020

这个问题您有彻底解决吗

 

0 项奖励
zhxqiao1
Visitor
Visitor
827 次查看
注册日期: ‎06-15-2020

没有
0 项奖励
tanyushuang
Contributor
Contributor
641 次查看
注册日期: ‎07-24-2019

感觉好像是没有释放的原因

pbuf_free(pbuf_to_be_sent);

在每次申请,发送之后,都要将这个内存释放掉,要用到pbuf_free这个函数。

希望可以帮到你。

0 项奖励