lwip stm32 - HTTP-запросы не выполняются

Я запускаю freeRTOS и lwip 1.4.1 с используемым сокетом api на процессоре stm32 (stm32f407). В целом работает неплохо. Я могу отправлять и получать данные с помощью UDP и TCP.

Но в временном окне от 3 до 7 дней я вижу странное поведение.

Моя проблема

Каждые 3–7 дней мой клиент (Windows 10, которая отправляет 1-2 HTTP-запроса в секунду) не может отправлять эти запросы. Когда это происходит, появляется ~ 10 запросов подряд, которые не выполняются. Через несколько мгновений стек вообще не будет восстанавливаться.

Моя догадка

Я думаю, что я, возможно, неправильно сконфигурировал что-то в своей конфигурации LWIP. Потому что стек хорошо используется и в этом направлении не должно быть ошибок.

Мои настройки Ethernet

сервер и клиент подключены напрямую, между ними нет коммутатора, концентратора или маршрутизатора.

сервер (stm32 / lwip):

  • статический, 192.168.168.2
  • маска сети, 255.255.255.0

клиент (win10) eth0:

  • статический, 192.168.168.1
  • маска сети, 255.255.255.0

клиент (win10) eth1:

  • dhcp, в нормальную рабочую сеть

Мои попытки

На данный момент у меня запущены тесты, которые отправляют ~ 7-8 запросов в секунду, но ошибка возникает нечасто. Я поигрался с конфигурацией lwip:

  • больше памяти для стека
  • больше pbufs
  • большие пбуфы
  • с / без отставания

Но все без улучшения этой проблемы с подключением. Может ли это быть из-за часто повторно используемых номеров портов от клиента, что могло вызвать эту проблему?

Здесь у меня есть соответствующая часть вывода отладки lwip:

tcp debugging output

https://pastebin.com/a9JabhET

Вот журнал Wireshark:

исходный снимок экрана < / а>

hole wireshark log:

https://www.file-upload.net/download-12682664/debug_tcp_00001_20170828172950.html

А вот мой lwipopts.h:

lwip configuration:

https://pastebin.com/cW0v4hF6


person i3luefire    schedule 29.08.2017    source источник


Ответы (2)


Кажется, проблема с памятью, но поскольку это временно, это может быть тайм-аут для чего-то. Я предлагаю использовать функции статистики памяти LwIP, а также включить отладочные сообщения ARP.

person ofaurax    schedule 30.04.2020

У меня новая работа, и я больше не работаю над этой проблемой.

Прежде чем я заявил о своей новой работе, я мог показать, что это не проблема памяти на LwIP (я определил необоснованно большие pbuf и пулы памяти), они никогда не достигли своих пределов.

Проблема была в драйвере DMA для ETH. При достижении конца цепочки памяти драйвера DMA элементы цепочки так и не были освобождены, поэтому я столкнулся с проблемами RBU (Receive Buffer Underrun), и флаг RBU больше не сбрасывался, а драйвер DMA ETH зависал в этом прерывании RBU (даже если там достаточно баффов LwIP для записи из цепочки DMA). Поэтому я добавил исправление кувалды в драйвер DMA и отключил прерывание RBU (я опрашиваю флаг RBU в нескольких ситуациях, сбрасываю его при необходимости и снова начинаю читать из ETH).

Думаю, с тех пор проблема более-менее решена. Неприятно, но это сработало.

person i3luefire    schedule 08.07.2020