maxpow 0 1 сентября, 2018 Опубликовано 1 сентября, 2018 · Жалоба Доброго времени суток. Использую STM32F407 и код, собранный в CubeMX. Вкратце, в проекте подняты Ethernet (LwIP) и USB CDC (RTOS не используется); по приходу UDP-пакета в Ethernet по USB на ПК отправляется диагностическое сообщение о том, что пакет успешно принят. Проблема состоит в следующем. В случае, если UDP-пакеты приходят с фиксированным интервалом (1 мс), всё работает правильно. Но при отправке данных без интервала (используется самописная программа на Qt) большая часть UDP-пакетов не обрабатывается (на 10 пакетов приходится 3-4 сообщения о приёме). Опытным путём было установлено, что проблема возникает только тогда, когда сообщение отправляется после каждого пришедшего пакета, т.е., если отправлять, например, одно сообщение на 255 пакетов, всё работает правильно. Предположительно, получается, что проблема в том, что контроллер не принимает или не обрабатывает пакет, пока идёт отправка сообщения по USB. Вопрос -- в следующем: правильно ли я понимаю суть проблемы, и, если да, то как её решить? Может, можно увеличить какие-то буферы или поднять скорость обработки данных каким-либо способом? Заранее спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 1 сентября, 2018 Опубликовано 1 сентября, 2018 (изменено) · Жалоба ...правильно ли я понимаю... ошибка в 55 строке... мало данных. начинайте пилить проблему на составляющие. включите-загляните в статистику lwip. Он показывает приём ваших потерянных пакетов? Если нет - сетевой уровень, плюс взаимодействие. Если ему пофигу и приём успешен - значит затык далее. И ещё. У вас в одном потоке или что то многопоточное прикручено? Используется ли пдп, он же дма :) ? аллокатор памяти какой юзаете? Правильно ли используете сам lwip? удачи вам (круглый) PS Если траблы с lwip-ом - то переносите, заводите топик в сетевов разделе вопросов. Там по сети толковые ответы получите быстрее. Изменено 1 сентября, 2018 пользователем kolobok0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 3 сентября, 2018 Опубликовано 3 сентября, 2018 · Жалоба пока идёт отправка сообщения по USB. Я бы отделил мух от котлет. Сейчас не понятно, где у вас проблема: в ETH, USB или и там и там. Поэтому, сделайте вывод о статистике работы сети через простой и надёжный USART. Скажем так, там ломаться нечему. Если проблема останется, то я бы начал с драйвера MAC, PHY. Сам lwip вроде как годами откатан и его надёжность не вызывает сомнений. Но может быть необходимо подкрутить настройки, коих довольно много. Если wireshark позволяет создавать сырые пакеты, то можно ей потестировать работоспособность MAC, выводя статистику в консоль через usart. А вообще данных дейсвительно мало. Мы ведь даже не знаем, как у вас организованы обработчики прерываний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться