Перейти к содержанию
    

LwIP на STM32F4: потери UDP-пакетов

Доброго времени суток. Использую STM32F407 и код, собранный в CubeMX. Вкратце, в проекте подняты Ethernet (LwIP) и USB CDC (RTOS не используется); по приходу UDP-пакета в Ethernet по USB на ПК отправляется диагностическое сообщение о том, что пакет успешно принят.

Проблема состоит в следующем. В случае, если UDP-пакеты приходят с фиксированным интервалом (1 мс), всё работает правильно. Но при отправке данных без интервала (используется самописная программа на Qt) большая часть UDP-пакетов не обрабатывается (на 10 пакетов приходится 3-4 сообщения о приёме). Опытным путём было установлено, что проблема возникает только тогда, когда сообщение отправляется после каждого пришедшего пакета, т.е., если отправлять, например, одно сообщение на 255 пакетов, всё работает правильно. Предположительно, получается, что проблема в том, что контроллер не принимает или не обрабатывает пакет, пока идёт отправка сообщения по USB.

Вопрос -- в следующем: правильно ли я понимаю суть проблемы, и, если да, то как её решить? Может, можно увеличить какие-то буферы или поднять скорость обработки данных каким-либо способом? Заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...правильно ли я понимаю...

 

ошибка в 55 строке...

мало данных. начинайте пилить проблему на составляющие. включите-загляните в статистику lwip. Он показывает приём ваших потерянных пакетов? Если нет - сетевой уровень, плюс взаимодействие. Если ему пофигу и приём успешен - значит затык далее. И ещё. У вас в одном потоке или что то многопоточное прикручено? Используется ли пдп, он же дма :) ? аллокатор памяти какой юзаете? Правильно ли используете сам lwip?

 

 

удачи вам

(круглый)

PS

Если траблы с lwip-ом - то переносите, заводите топик в сетевов разделе вопросов. Там по сети толковые ответы получите быстрее.

Изменено пользователем kolobok0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пока идёт отправка сообщения по USB.

Я бы отделил мух от котлет. Сейчас не понятно, где у вас проблема: в ETH, USB или и там и там. Поэтому, сделайте вывод о статистике работы сети через простой и надёжный USART. Скажем так, там ломаться нечему. Если проблема останется, то я бы начал с драйвера MAC, PHY. Сам lwip вроде как годами откатан и его надёжность не вызывает сомнений. Но может быть необходимо подкрутить настройки, коих довольно много. Если wireshark позволяет создавать сырые пакеты, то можно ей потестировать работоспособность MAC, выводя статистику в консоль через usart. А вообще данных дейсвительно мало. Мы ведь даже не знаем, как у вас организованы обработчики прерываний.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...