如上所述,在 Zedboard 上使用 FreeRTOS+LwIP 时遇到问题,该板刚刚崩溃并需要电源重置。我认为这与网络连接有关,我有两个,一个用于传入流量,一个用于传出,都连接良好,但是数据似乎有点奇怪。
这是我用来从 PC 接收数据的功能:
while (ntotal < size)
{
n = lwip_read(connection_descriptor, (buffer+ntotal), size - ntotal);
if (n < 0)
{
printf("Failed receiving frame, received %i bytes\n", ntotal);
return -1;
}
ntotal = ntotal + n;
}
这是传出的:
int bytesSent = 0;
int bytesSentTotal = 0;
int lengthToSend = 0;
int lengthToSendTotal = 0;
lengthToSendTotal = Size;
lengthToSend = 1460;
printf("Processed frame about to be sent from obin%d\n", binNO);
while (bytesSentTotal + lengthToSend < lengthToSendTotal)
{
//lengthToSend = lengthToSendTotal - bytesSentTotal;
bytesSent = lwip_write(connection_descriptor, &(buffer[bytesSentTotal]), lengthToSend);
if (bytesSent < 0)
{
printf("ERROR writing frame to socket\n");
return -1;
}
else
{
bytesSentTotal += bytesSent;
//printf("Data sent: %d\n", bytesSentTotal);
}
}
lengthToSend = lengthToSendTotal - bytesSentTotal;
bytesSent = lwip_write(connection_descriptor, &(buffer[bytesSentTotal]), lengthToSend);
我尝试将其更改为每次调用发送较少量的数据,因为我想知道尝试一次发送大量数据是否会导致问题(希望每次发送 900kb+)。但是无论如何行为似乎都是一样的,它会开始正常,接收到数据,然后它会冻结,通常是在发送数据的中途,直到最后我的 PC 上的客户端代码由于无响应而在写入命令时失败网络连接(或类似的东西)。
所以我只是想知道是否有什么明显的我做错了?