Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32f407 + freertos 7.2.0 & Lwip 1.3.2 - задержка в TCP
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
uskms
Использую пример http-сервера на сокетах, при этом приходится ждать около 20 секунд пока контроллер пошлёт запрошенные данные. Т.е. по сути задержка в tcp. Пинг идет стабильно, среднее время пинга 1 мс. Может быть кто-нибудь сталкивался и с чем вообще это может быть связано?
uskms
Подвисает как раз в функции приёма данных из потока tcpip:

CODE

u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout)
{
void *dummyptr;
portTickType StartTime, EndTime, Elapsed;

StartTime = xTaskGetTickCount();

if ( msg == NULL )
{
msg = &dummyptr;
}

if ( timeout != 0 )
{
if ( pdTRUE == xQueueReceive( mbox, &(*msg), timeout / portTICK_RATE_MS ) )
{
EndTime = xTaskGetTickCount();
Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;

return ( Elapsed );
}
else // timed out blocking for message
{
*msg = NULL;

return SYS_ARCH_TIMEOUT;
}
}
else // block forever for a message.
{
while( pdTRUE != xQueueReceive( mbox, &(*msg), portMAX_DELAY ) ){} // time is arbitrary <- Вот здесь
EndTime = xTaskGetTickCount();
Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;

return ( Elapsed ); // return time blocked TODO test
}
}
uskms
Всё, кажется разобрался. Прблема была в плохой разводке. Пакеты с TCP длиннее, чем с ICMP, поэтому приходили с ошибками.
athlon64
У этого примера от ST несколько проблем, по которым есть информация в форуме.
В вашем случае скорее всего теряются пакеты из-за косяков в порте Lwip для FreeRTOS.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.