Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32f207+lwip
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Entuziast
имеется устройство на stm32f207 с dp83848CVV в качестве phy-интерфейса в режиме RMII. запускается и нормально работает пример от ST tcp/udp-echo server.
Проблема в том что всё работает только если в сети есть сервер и только один клиент. если появляется второй клиент то с ним не устанавливается соединение и пропадает соединение с первым клиентом. при выключении
второго клиета соединение с первым востанавливается без перезагрузки сервера и начинает снова пинговаться и зеркалиться. первый клиент так же не перезагружается. клиенты - компьютеры, сервер бежит на самодельной железке. HW сетевой части - полный копи-пэйст с ST-ой демоборды для stm32f207. IP-адреса на сервере и клиетах задаются статически.
Можно ли сделать , чтоб сервер работал с несколькими клиетами?
Entuziast
сумел нарыть только вот это
http://lists.nongnu.org/archive/html/lwip-...8/msg00006.html
получается что с 2006годана этот вопрос нет ответа?
kan35
Возможно следует поиграть размерами буферов, возможно не хватает памяти... Вряд ли lwIP настолько кривой, чтобы была такая ошибка в нем.
scifi
Цитата(kan35 @ Sep 24 2012, 23:25) *
Вряд ли lwIP настолько кривой, чтобы была такая ошибка в нем.

lwip не кривой. Просто примеры на его основе часто кривые. Чтобы он нормально работал, его надо хоть немного понимать.
MBR
Плавали. lwip кривой. TCP уровень не thread-safe, поэтому и проблемы при появлении второго клиента. О чем можно вполне погуглить. Частично проблема решается мьютексами вызовов lwip.
Entuziast
Цитата(MBR @ Sep 26 2012, 10:23) *
Плавали. lwip кривой. TCP уровень не thread-safe, поэтому и проблемы при появлении второго клиента. О чем можно вполне погуглить. Частично проблема решается мьютексами вызовов lwip.


а можно подробней , хоть на что гуглить? или на какие вызовы мютексы ставить?
спасибо за ответ.
alx2
Цитата(MBR @ Sep 26 2012, 11:23) *
Частично проблема решается мьютексами вызовов lwip.

И почему частично?
MBR
Цитата(Entuziast @ Sep 27 2012, 00:43) *
а можно подробней , хоть на что гуглить? или на какие вызовы мютексы ставить?

Читайте документацию на lwip. Там есть дефайн, который включает внутренние мьютексы. Впрочем, они из серии experimental и дырявы. Студент получил диплом и забил на проект.

Цитата(alx2 @ Sep 27 2012, 07:41) *
И почему частично?

Потому, что не все вызовы изолированы. Становится стабильней, но все равно работает глючно. Я поступил совсем брутально - полным переписыванием уровня TCP - на уровне IP там все в порядке. Но, к сожалению, это коммерческий проект, я не могу поделиться исходниками.
Entuziast
Цитата(MBR @ Sep 27 2012, 09:29) *
Читайте документацию на lwip. Там есть дефайн, который включает внутренние мьютексы. Впрочем, они из серии experimental и дырявы. Студент получил диплом и забил на проект.


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


большое спасибо за инфу
последний вопрос - не могли бы порекомендовать надёжную реализацию стека TCP -платную либо бесплатную чтобы бежала на 3-ем кортексе?
scifi
Цитата(MBR @ Sep 26 2012, 10:23) *
Плавали. lwip кривой. TCP уровень не thread-safe, поэтому и проблемы при появлении второго клиента.

Про то, что lwip не thread-safe, они прямо пишут. Так и говорят: TCP должен работать в отдельном потоке.
Однако, проблема топикстартера скорее всего не в этом. Вероятно, пример от ST не предназначен для работы с двумя клиентами. Надо смотреть, как там устроен код установления соединения.
Сам делал HTTP сервер и TELNET сервер на lwip. Никаких проблем с одновременным соединением нескольких клиентов не было. Более того, однажды даже ограничивал число соединений к TELNET серверу одним клиентом: пока сервер занят, соединение от второго клиента не принималось.
MBR
Цитата(scifi @ Sep 27 2012, 09:49) *
Про то, что lwip не thread-safe, они прямо пишут. Так и говорят: TCP должен работать в отдельном потоке.

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


Цитата(Entuziast @ Sep 27 2012, 09:42) *
последний вопрос - не могли бы порекомендовать надёжную реализацию стека TCP -платную либо бесплатную чтобы бежала на 3-ем кортексе?

К сожалению, не подскажу много. Есть еще у tnkernel своя реализация, но там нет lcp.
Entuziast
Цитата(MBR @ Sep 27 2012, 10:33) *
К сожалению, не подскажу много. Есть еще у tnkernel своя реализация, но там нет lcp.

what is "lcp"?

Цитата(scifi @ Sep 27 2012, 09:49) *
Про то, что lwip не thread-safe, они прямо пишут. Так и говорят: TCP должен работать в отдельном потоке.
Однако, проблема топикстартера скорее всего не в этом. Вероятно, пример от ST не предназначен для работы с двумя клиентами. Надо смотреть, как там устроен код установления соединения.
Сам делал HTTP сервер и TELNET сервер на lwip. Никаких проблем с одновременным соединением нескольких клиентов не было. Более того, однажды даже ограничивал число соединений к TELNET серверу одним клиентом: пока сервер занят, соединение от второго клиента не принималось.

втом то и дело что моя поблема именно с tcp-echo. с НТТР и телнeт в lwip подобного не наблюдалось

Цитата(Entuziast @ Sep 27 2012, 11:23) *
what is "lcp"?

tnkernel - do you mind "thinkernel" from yuri temkin?
kan35
Цитата(MBR @ Sep 27 2012, 10:33) *
Тем не менее, это не особо помогает. Я не могу сказать про реализацию сервера, скажу лишь про реализацию нескольких клиентов на одном lwip: при попытке одновременного вызова функций lwip из разных процессов, lwip гарантированно валится. А изолировать все вызовы lwip внешними мьютексами тоже не всегда возможно.

Не понятно, что не особо помогает? - этого просто делать нельзя. Работа с lwIP должна производиться из одного потока. Кажется, в версии 1.4 это уже преодолели, по крайней мере в планах на будущее это стояло, но я завис на 1.3.2, потому про 1.4 не уверен.
MBR
Цитата(kan35 @ Sep 27 2012, 21:48) *
Работа с lwIP должна производиться из одного потока.

На кой она тогда нужна, кроме простейших задач?

Цитата(kan35 @ Sep 27 2012, 21:48) *
Кажется, в версии 1.4 это уже преодолели, по крайней мере в планах на будущее это стояло, но я завис на 1.3.2, потому про 1.4 не уверен.

Нет, все осталось как есть.
Grape
специально проверил,
4 задачи передают данные, суммарный поток ~2MB/c + пятая telnet

запущено вчера вечером.
на данный момент никаких проблем

lwip из git + tnkernel. lpc1778

/gr
scifi
Цитата(Grape @ Sep 28 2012, 11:51) *
специально проверил,
4 задачи передают данные, суммарный поток ~2MB/c + пятая telnet

Дык это всё давно известно тем, кто хочет знать.
"Они просто не умеют его готовить" :-)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.