Как и выше, возникают проблемы с использованием FreeRTOS + LwIP на Zedboard, когда плата просто выходит из строя и требует сброса питания. Я думаю, что это связано с сетевыми подключениями, у меня их два, один для входящего трафика и один для исходящего, оба подключаются нормально, однако данные кажутся немного странными.
Вот функция, которую я использую для получения данных с ПК:
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);
Я попытался изменить его, чтобы отправлять меньший объем данных за вызов, так как мне было интересно, не вызывает ли проблема одновременная отправка большого объема (каждый раз требуется отправить 900 КБ+). Однако поведение кажется таким же, независимо от того, оно запустится нормально, с получением данных, затем оно зависнет, часто на полпути к отправке данных обратно, пока, наконец, клиентский код на моем ПК не выйдет из строя при команде записи из-за отсутствия ответа сетевое подключение (или что-то подобное).
Так что мне просто интересно, есть ли что-то очевидное, что я делаю неправильно?