Проблемы TCP с freeRTOS + LwIP с потоками/задачами

Как и выше, возникают проблемы с использованием 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 КБ+). Однако поведение кажется таким же, независимо от того, оно запустится нормально, с получением данных, затем оно зависнет, часто на полпути к отправке данных обратно, пока, наконец, клиентский код на моем ПК не выйдет из строя при команде записи из-за отсутствия ответа сетевое подключение (или что-то подобное).

Так что мне просто интересно, есть ли что-то очевидное, что я делаю неправильно?


person GeorgeStorm    schedule 23.04.2015    source источник


Ответы (1)


Что происходит, когда он падает? Где заканчивается программа (в assert(), в обработчике исключений и т. д.)? Какую версию FreeRTOS вы используете — если это новая версия, то у вас есть configASSERT() определено, что может помочь выявить проблемы интеграции с FreeRTOS?

Был ли ваш проект основан на следующей ссылке? http://www.freertos.org/RTOS-Xilinx-Zynq.html - если нет, возможно, просмотр этого кода может дать подсказку о том, в чем может быть проблема.

person Richard    schedule 23.04.2015
comment
Я не знаю, программное обеспечение перестает выводить (используя gtkterm для просмотра printfs и т. д.), и когда оно пытается остановить его с помощью XilinxSDK, оно говорит, что не может остановить процессор, требуется сброс питания. Пробовал запускать его в режиме отладки, но когда я пытаюсь приостановить его, когда он, кажется, заблокирован, он говорит то же самое. Я начал использовать предоставленную мне версию, а затем обновил ее до последней версии, заменив старый каталог src (я думаю). Я должен был упомянуть, что входящие и исходящие - это отдельные сокеты в разных задачах. - person GeorgeStorm; 23.04.2015