本来我不会弄tcp_write 等函数的调用,好不容易能收发了。但出现丢包现象。
(1)我布线布得不太好。一些去耦电容没加。这版没办法了改。
(2)对LM3S9b96这片ARM的以太网口做了测试,
是lwip测试程序。测试程序见下:
while(ErrFlag!=ERR_OK)
{
ErrFlag=tcp_write(pcb_RecordSend, &TCPSendData, 1034, 1);
tcp_output(pcb_RecordSend);
L_Delay1ms();
L_Delay1ms();
L_Delay500us();
//L_Delay1ms();
//L_Delay5ms();
//L_Delay(290);
if(ErrFlag!=ERR_OK)
Cnt++;
}
Count[Cnt]++;
ErrFlag=1;
Cnt=0;
发现如果第一次发送不成功,只需重发一次即可发送成功,且发送间隔不能小于2.5ms,间隔再小就会出现以下错误:
err = tcp_write_checks(pcb, len);
//函数对发送数据长度以及发送缓冲区做判断,由于send_buf长度小于发送数据长度1034则发送中断。
/* fail on too much data */
if (len > pcb->snd_buf)
{
LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_write: too much data (len=%"U16_F" > snd_buf=%"U16_F")\n",
len, pcb->snd_buf));
pcb->flags |= TF_NAGLEMEMERR;
return ERR_MEM;
}
ERR_MEM应该是内存溢出,发送buffer不够,请帮忙查下,这个sendbuffer大小能不能改动。