|
stm32f207+lwip, bug(s) or/and feature(s) ? |
|
|
|
Sep 23 2012, 08:13
|
Группа: Validating
Сообщений: 14
Регистрация: 22-10-07
Пользователь №: 31 604

|
имеется устройство на stm32f207 с dp83848CVV в качестве phy-интерфейса в режиме RMII. запускается и нормально работает пример от ST tcp/udp-echo server. Проблема в том что всё работает только если в сети есть сервер и только один клиент. если появляется второй клиент то с ним не устанавливается соединение и пропадает соединение с первым клиентом. при выключении второго клиета соединение с первым востанавливается без перезагрузки сервера и начинает снова пинговаться и зеркалиться. первый клиент так же не перезагружается. клиенты - компьютеры, сервер бежит на самодельной железке. HW сетевой части - полный копи-пэйст с ST-ой демоборды для stm32f207. IP-адреса на сервере и клиетах задаются статически. Можно ли сделать , чтоб сервер работал с несколькими клиетами?
Сообщение отредактировал Entuziast - Sep 23 2012, 08:15
|
|
|
|
|
Sep 26 2012, 20:43
|
Группа: Validating
Сообщений: 14
Регистрация: 22-10-07
Пользователь №: 31 604

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

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(MBR @ Sep 26 2012, 11:23)  Частично проблема решается мьютексами вызовов lwip. И почему частично?
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Sep 27 2012, 05:29
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748

|
Цитата(Entuziast @ Sep 27 2012, 00:43)  а можно подробней , хоть на что гуглить? или на какие вызовы мютексы ставить? Читайте документацию на lwip. Там есть дефайн, который включает внутренние мьютексы. Впрочем, они из серии experimental и дырявы. Студент получил диплом и забил на проект. Цитата(alx2 @ Sep 27 2012, 07:41)  И почему частично? Потому, что не все вызовы изолированы. Становится стабильней, но все равно работает глючно. Я поступил совсем брутально - полным переписыванием уровня TCP - на уровне IP там все в порядке. Но, к сожалению, это коммерческий проект, я не могу поделиться исходниками.
|
|
|
|
|
Sep 27 2012, 05:42
|
Группа: Validating
Сообщений: 14
Регистрация: 22-10-07
Пользователь №: 31 604

|
Цитата(MBR @ Sep 27 2012, 09:29)  Читайте документацию на lwip. Там есть дефайн, который включает внутренние мьютексы. Впрочем, они из серии experimental и дырявы. Студент получил диплом и забил на проект.
Потому, что не все вызовы изолированы. Становится стабильней, но все равно работает глючно. Я поступил совсем брутально - полным переписыванием уровня TCP - на уровне IP там все в порядке. Но, к сожалению, это коммерческий проект, я не могу поделиться исходниками. большое спасибо за инфу последний вопрос - не могли бы порекомендовать надёжную реализацию стека TCP -платную либо бесплатную чтобы бежала на 3-ем кортексе?
|
|
|
|
|
Sep 27 2012, 05:49
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(MBR @ Sep 26 2012, 10:23)  Плавали. lwip кривой. TCP уровень не thread-safe, поэтому и проблемы при появлении второго клиента. Про то, что lwip не thread-safe, они прямо пишут. Так и говорят: TCP должен работать в отдельном потоке. Однако, проблема топикстартера скорее всего не в этом. Вероятно, пример от ST не предназначен для работы с двумя клиентами. Надо смотреть, как там устроен код установления соединения. Сам делал HTTP сервер и TELNET сервер на lwip. Никаких проблем с одновременным соединением нескольких клиентов не было. Более того, однажды даже ограничивал число соединений к TELNET серверу одним клиентом: пока сервер занят, соединение от второго клиента не принималось.
|
|
|
|
|
Sep 27 2012, 06:33
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748

|
Цитата(scifi @ Sep 27 2012, 09:49)  Про то, что lwip не thread-safe, они прямо пишут. Так и говорят: TCP должен работать в отдельном потоке. Тем не менее, это не особо помогает. Я не могу сказать про реализацию сервера, скажу лишь про реализацию нескольких клиентов на одном lwip: при попытке одновременного вызова функций lwip из разных процессов, lwip гарантированно валится. А изолировать все вызовы lwip внешними мьютексами тоже не всегда возможно. Цитата(Entuziast @ Sep 27 2012, 09:42)  последний вопрос - не могли бы порекомендовать надёжную реализацию стека TCP -платную либо бесплатную чтобы бежала на 3-ем кортексе? К сожалению, не подскажу много. Есть еще у tnkernel своя реализация, но там нет lcp.
|
|
|
|
|
Sep 27 2012, 07:27
|
Группа: Validating
Сообщений: 14
Регистрация: 22-10-07
Пользователь №: 31 604

|
Цитата(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?
|
|
|
|
|
Sep 27 2012, 17:48
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Цитата(MBR @ Sep 27 2012, 10:33)  Тем не менее, это не особо помогает. Я не могу сказать про реализацию сервера, скажу лишь про реализацию нескольких клиентов на одном lwip: при попытке одновременного вызова функций lwip из разных процессов, lwip гарантированно валится. А изолировать все вызовы lwip внешними мьютексами тоже не всегда возможно. Не понятно, что не особо помогает? - этого просто делать нельзя. Работа с lwIP должна производиться из одного потока. Кажется, в версии 1.4 это уже преодолели, по крайней мере в планах на будущее это стояло, но я завис на 1.3.2, потому про 1.4 не уверен.
|
|
|
|
|
Sep 28 2012, 04:46
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748

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

Группа: Свой
Сообщений: 69
Регистрация: 22-10-04
Пользователь №: 956

|
специально проверил, 4 задачи передают данные, суммарный поток ~2MB/c + пятая telnet
запущено вчера вечером. на данный момент никаких проблем
lwip из git + tnkernel. lpc1778
/gr
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|