ZYNQ lwip跑双网口,频繁运行几天后出现丢包现象

项目场景:

之前需要用ZYNQ 的lwip来做双网口,由于是裸机,所以用的都是中断接受数据,再解析数据发送

问题描述

在双网口测试时,发现两个网口数据都频繁发送接收时,会有丢包现象。

原因分析:

在lwip发送和接收数据时,用到的tcp_write,tco_recved,tcp_output,在发生数据处理的时候,很可能会被重入(正在发送网口1的数据,被网口2打断),需要在这些函数里面把网卡中断都关闭,执行之后再打开中断
ZYNQ lwip跑双网口,频繁运行几天后出现丢包现象_第1张图片

解决方案:

以tcp_write为例,新建一个tcp_write函数,把原本的tcp_write函数更名为tcp_write1
然后如下
err_t tcp_write(struct tcp_pcb *pcb,const void *arg,u16_t len,u8_t apiflags)
{
err_t err;
XScuGic_Disable(&g_tIntc,(32)XPAR_PS7_ETHERNET_0_INTR);
XScuGic_Disable(&g_tIntc,(32)XPAR_PS7_ETHERNET_1_INTR);
err = tcp_write1(pcb,arg,len,apiflags);
XScuGic_Enable(&g_tIntc,(32)XPAR_PS7_ETHERNET_0_INTR);
XScuGic_Enable(&g_tIntc,(32)XPAR_PS7_ETHERNET_1_INTR);
return err;
}

你可能感兴趣的:(网络)