Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Cетевые протоколы и технологии

Cетевые протоколы и технологии TCP/IP стек

Ответ
 
Опции темы Опции просмотра
Старый 29.03.2016, 10:49   #1
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Снова вопрос по LwIP

Всем добрый день.

Возник вопрос по разделению различных соединений TCP в LwIP.
Открываю первое соединение. В обработчике ...accept
получаю некий pcb (смотрю ссылку - она 536898084 (преобразование ссылки в число)).
Далее не закрывая предыдущее соединение открываю второе с того же IP
и к тому же порту! Это важно.
В ...accept получаю ссылку уже на другой pcb (536897788)
Все нормально.
Но далее замечаю, что данные поступают с обоих соединений на ОДИН из 2-х существующих pcb.
При открытии соединения с разных IP или на разные порты такой проблемы не возникает.

Вообще этот эффект (если я правильно его идентифицировал) вызывает
большие и непреодолимые проблемы при поддержке нескольких пользователей.
Допустим 2-й послал некую команду и закрыл соединение.
Закрылся первый pcb (для каждого уникального pcb я создаю уникальный контекст пользователя).
Это выгрузит контекст 1 из памяти и закроет 1-й pcb.
При этом пользователь 1 такую команду не подавал.
И кроме того контекст 2 и 2-й pcb не выгружены из памяти! Конечно они могут быть закрыты по таймеру, но это не решение вообще.

Ситуация, когда с одного IP и к одному порту создается несколько соединений абсолютно нормальна.
Это делают все браузеры для запросов разных объектов на странице (к порту 80).
Также (как пример) это может сделать Total Commander при открытии фоновой загрузки по FTP (к порту 21).
Поэтому ситуация абсолютно жизненная.

Этот вопрос в документации на LwIP не освещен абсолютно.
Кто что знает?
Petr вне форума   Ответить с цитированием
Старый 29.03.2016, 12:58   #2
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/108
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Petr Посмотреть сообщение
Далее не закрывая предыдущее соединение открываю второе с того же IP
и к тому же порту! Это важно.
В ...accept получаю ссылку уже на другой pcb (536897788)
Все нормально.
Но далее замечаю, ...
Исходящие порты хоть разные?
В противном случае как "разно-одинаковые" соединения идентифицировать?
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 29.03.2016, 13:36   #3
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от IceS Посмотреть сообщение
Исходящие порты хоть разные?
В противном случае как "разно-одинаковые" соединения идентифицировать?
Конечно. Исходящие порты разные.
Впрочем, если были бы одинаковые, то не создавался бы
новый pcb, а пакет свалился бы на имеющееся TCP соединение.
Но он создается при создании нового TCP.

Возможно конечно, что происходит порча памяти или проблемы
оптимизации компилера.
Но это уже дело житейское. Но каких либо дополнительных
признаков этого нет. Хотя софт довольно многофункциональный и
все остальное работает хорошо.
Падения LwIP также не происходит.
Просто закрывается "не то" соединение.
Petr вне форума   Ответить с цитированием
Старый 29.03.2016, 14:17   #4
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Petr Посмотреть сообщение
Всем добрый день.

Возник вопрос по разделению различных соединений TCP в LwIP.
...
Далее не закрывая предыдущее соединение открываю второе с того же IP
и к тому же порту! Это важно.
...
При открытии соединения с разных IP или на разные порты такой проблемы не возникает.
...
Ситуация, когда с одного IP и к одному порту создается несколько соединений абсолютно нормальна.
...
Этот вопрос в документации на LwIP не освещен абсолютно.
Кто что знает?
Использую LwIP-стек, девайс с поддержкой ModbusTCP является ModbusTCP сервером, позволяет подключаться несольким клиентам одновременно.
Лично проверял. На компе с Windows XP (многозадачная ось такая) запускаю несколько ModbusTCP-клиентов (программы такие), каждый из которых подключается и правильно читает информацию.
Все клиенты соединяются с девайсом у которого IP 192.168.1.100 и порт 502. У компа IP 192.168.1.10.
Количество одновременно открытых TCP соединений задается в файле lwipopts.h
Цитата:
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. */
#define MEMP_NUM_TCP_PCB 10
Т.е. 10 клиентов одновременно.

Может, ваша проблема - результат правки стека и непонимания его работы? Это же первый ваш опыт, до этого вы его не использовали. Знаю, слежу за вашими успехами. Только взять нечего.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 29.03.2016, 15:06   #5
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Может, ваша проблема - результат правки стека и непонимания его работы? Это же первый ваш опыт, до этого вы его не использовали. Знаю, слежу за вашими успехами. Только взять нечего.
Из этого следует, что вы понимаете его работу в этой части(и в целом) значительно лучше(я серьезно)!???

Значит можете дать СОВЕТ? Или совет по дальнейшим действиям?

На электрониксе пришли к мысли, что надо в лог вываливать не только визуализированную ссылку на pcb, но и пары входящий/исходящий порт
по каждому приходу данных.
Что может помочь понять источник проблемы. Код идентификации пакетов
в самом LwIP смотрели(там ничего интересного).

Стек мной не модифицировался (о чем и написано в моем предыдущем посте) для сохранения совместимости и апгрейдов.

А что касается гордого описания реализации модбаса - тупой пример.
Сразу ясно, что по нему описанный глюк даже теоретически заметен быть не может.

Во первых непонятно создается ли для каждого входящего TCP соединения (для каждой копии pcb) отдельный контекст юзера или нет?
При реализации модбаса это необязательно!
Можно использовать глобальные переменные и все будет чудесно работать с многими юзерами (копиями pcb).
Поскольку каждый запрос изолирован и полностью покрывается одним ответом.
Ситуация аналогична работа WEB сервера.
Браузер присылает при открытии соединения HTTP запрос файла - он становится на отправку и соединение закрывается сервером по завершении передачи.
В этой цепочке событий глюк не наблюдается.
Он проявляется только если сервер ответил данными, а затем пришла другая команда по соединению (не просто ответный ACK).
Только в этом случае я наблюдаю обработку этой вторичной команды на
"чужом" pcb. И даже тут проблемы с модбас не будет.
Поскольку отправка ответа глюком не страдает!!!
Т.е. ответ после обработки "чужим" pcb уходит по "правильному" TCP коннекту.

Непонятка всплыла при реализации FTP, в котором по командному соединению (21-й порт) каждый юзер (с уникальным исходящим портом)
имеет много уникальных параметров.
Таких как авторизация, текущий каталог в файловой системе,
текущее соединение данных (по динамическому порту) и т.д.
И обмен клиент-сервер не ограничивается одним запрос-ответ,
а представляет собой непрерывную цепочку взаимосвязанных действий.
Для каждого юзера (уникальной копии pcb) я создаю динамически отдельную копию контекста работы (передается по цепочке обработчиков событий через штатный arg).
Утечек памяти или переполнения "кучи" нет - это просто контролировать.
Как раз обработка команды из "чужого" pcb текущим контекстом, свалившимся из arg и является проблемой.
Поскольку для этого юзера состояние сервера совершенно иное.

Пока я склоняюсь к мысли, что это проблема уникальности исходящих портов. Буду копать в этом направлении.
Хотя вроде ethereal показывает, что они все разные.
Да и pcb то новый создается. А он создается именно по факту уникального
исходящего порта.
Petr вне форума   Ответить с цитированием
Старый 29.03.2016, 15:14   #6
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Petr Посмотреть сообщение
Из этого следует, что вы понимаете его работу в этой части(и в целом) значительно лучше(я серьезно)!???

Значит можете дать СОВЕТ? Или совет по дальнейшим действиям?
В части вашего вопроса и дальнейших действий ничем не могу помочь. Чтобы давать совет, нужно обоим вникать и иметь один и тот же проект.
Цитата:
Сообщение от Petr Посмотреть сообщение
Во первых непонятно создается ли для каждого входящего TCP соединения (для каждой копии pcb) отдельный контекст юзера или нет?
При реализации модбаса это необязательно!
Можно использовать глобальные переменные и все будет чудесно работать с многими юзерами (копиями pcb).
Поскольку каждый запрос изолирован и полностью покрывается одним ответом.
В моем случае не проявляется никак, несколько клиентов устанавливают соединения и периодически опрашивают девайс.

Цитата:
Сообщение от Petr Посмотреть сообщение
Всем добрый день.

Возник вопрос по разделению различных соединений TCP в LwIP.
...
Далее не закрывая предыдущее соединение открываю второе с того же IP
и к тому же порту! Это важно.
...
Ситуация, когда с одного IP и к одному порту создается несколько соединений абсолютно нормальна.
Это делают все браузеры для запросов разных объектов на странице (к порту 80).
Очевидные вещи преподносятся как что-то уникальное. Смешались в кучу кони, люди и залпы тысячи орудий...
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 29.03.2016 в 15:21.
Pridnya вне форума   Ответить с цитированием
Старый 29.03.2016, 15:42   #7
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/108
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Снова вопрос по LwIP

Тут подумалось.
А точно со стороны компа все хорошо уходит?
WireShark все хорошо показывает?
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 29.03.2016, 19:04   #8
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от IceS Посмотреть сообщение
Тут подумалось.
А точно со стороны компа все хорошо уходит?
WireShark все хорошо показывает?
У меня etherreal, и показывает он, что все ОК.
Т.е. стек отвечает на нужный порт и снаружи соединения не путает точно!
А вот внутри что то не то.
Но посмотрим. Может и я что то недоглядел. Завтра разберусь.
Petr вне форума   Ответить с цитированием
Старый 29.03.2016, 19:09   #9
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
В моем случае не проявляется никак, несколько клиентов устанавливают соединения и периодически опрашивают девайс.

Так создаете динамически отдельные контексты для каждого соединения или нет? Это важная фишка!
Не ответили на вопрос!
Если да - то проверяли ли выгрузку всех копий по истечении некоторого времени работы с разными клиентами?
Если не проверяли и создаете динамически можете налететь на нехватку памяти через некоторое время работы. И именно по "моей" причине. И на первый взгляд все будет ОК при проверке.
Т.е. будет непонятное падение после многих подключений.
И конечно важно кто именно закрывает соединение.
Ну и сделана ли периодическая функция на каждый pcb(и что делает функция).
Petr вне форума   Ответить с цитированием
Старый 30.03.2016, 08:25   #10
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Petr Посмотреть сообщение
Так создаете динамически отдельные контексты для каждого соединения или нет? Это важная фишка!
Не ответили на вопрос!
Если да - то проверяли ли выгрузку всех копий по истечении некоторого времени работы с разными клиентами?
Если не проверяли и создаете динамически можете налететь на нехватку памяти через некоторое время работы. И именно по "моей" причине. И на первый взгляд все будет ОК при проверке.
Т.е. будет непонятное падение после многих подключений.
И конечно важно кто именно закрывает соединение.
Ну и сделана ли периодическая функция на каждый pcb(и что делает функция).
Во вы в дебри залезли. Я даже не знаю что ответить. У меня подобных вопросов
Цитата:
динамически отдельные контексты для каждого соединения
не возникало. В смысле, что это я должен создавать "динамически отдельные контексты для каждого соединения" и что это, о чем речь. Динамически я память не выделяю. Или я, или вы, не понимаем вопроса. Из теории известно, что протокол TCP это протокол с установкой соединения. Количество соединений задается в настройках стека. Следовательно, стек сам должен разделять соединения, что я и увидел, когда к одному девайсу подключаются несколько клиентов, они устанавливают соединение, т.е. одновременно есть несколько соединений, два и более, затем читают массив данных (глобальная переменная). Все клиенты читают правильно, хоть из одной области массива, хоть из разных, например, первый клиент читает первые 100 ячеек массива, второй с 101-200. У меня даже мысли не возникало, что LwIP-стек должен не уметь разделять TCP соединения, что ж это за стек, который этого не умеет делать. Кто что читает, то тому и приходит. Т.е. это у меня ModbusTCP-сервер, прототипом являлся TCP-эхо-сервер из примеров. Что TCP-эхо-сервер работал, что поверх TCP добавил ModbusTCP.
По-моему, вы что-то не то делаете и не там копаете, либо вопрос задаете не правильно, что-то не то.
У меня система ведет журнал, от чего происходит сброс, аппаратный, программный, от сторожевого таймера.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 30.03.2016, 08:47   #11
smart_pic
Senior Member
 
Регистрация: 08.12.2008
Адрес: Ставрополь
Возраст: 54
Сообщений: 960
Вес репутации: 2006/62
smart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond repute
Отправить сообщение для smart_pic с помощью Skype™
По умолчанию Re: Снова вопрос по LwIP

Как я понял суть вопроса Petr .
Микрочиповский стек позволяет генерить динамически изменяемые html странички. Petr пожелал идти дальше и генерить странички для каждого входящего подключения индивидуально. Зачем ему это надо - другая тема. И не важно с одного компа идет несколько подключений или это разные компы с разными IP. Такая ситуация имеет место быть.
Правильно? Petr
smart_pic вне форума   Ответить с цитированием
Старый 30.03.2016, 09:25   #12
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,125
Вес репутации: 2885/99
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от smart_pic Посмотреть сообщение
Как я понял суть вопроса Petr .
Микрочиповский стек позволяет генерить динамически изменяемые html странички. Petr пожелал идти дальше и генерить странички для каждого входящего подключения индивидуально. Зачем ему это надо - другая тема. И не важно с одного компа идет несколько подключений или это разные компы с разными IP. Такая ситуация имеет место быть.
Правильно? Petr
Нет Вы неправильно поняли и микрочиповский стек не причем здесь. Я вместо Petr-а ответил (извиняюсь), но с одной целью, чтоб тема дальше не "захламлялась". А по теме такое скажу - вот у меня используется ОС с LwIP (и соотв-но там используется Netconn API и оно хоть и содержит глубоко внутри себя использование pcb, но уже по другому работает в целом и поэтому ничего не ответил тут раньше), но при использовании ОС легче все проблемы решаются с созданиями новых соединений выделений памяти и т.д. и т.п. Но расплата за это тоже есть - в виде большего потребления памяти. Пока такая информация. Надо дальше тоже посмотреть (мне), что и как.
AleksBak вне форума   Ответить с цитированием
Старый 30.03.2016, 09:42   #13
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от AleksBak Посмотреть сообщение
Нет Вы неправильно поняли и микрочиповский стек не причем здесь. Я вместо Petr-а ответил (извиняюсь), но с одной целью, чтоб тема дальше не "захламлялась". А по теме такое скажу - вот у меня используется ОС с LwIP (и соотв-но там используется Netconn API и оно хоть и содержит глубоко внутри себя использование pcb, но уже по другому работает в целом и поэтому ничего не ответил тут раньше), но при использовании ОС легче все проблемы решаются с созданиями новых соединений выделений памяти и т.д. и т.п. Но расплата за это тоже есть - в виде большего потребления памяти. Пока такая информация. Надо дальше тоже посмотреть (мне), что и как.
Алекс, если ты помнишь, Petr не использует RTOS, поэтому твой совет ему не поможет решить вопрос. Работа с LwIP стеком с RTOS и без неё отличается. Хорошо бы услышать ответ Петра на этот вопрос .
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 30.03.2016, 10:24   #14
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,125
Вес репутации: 2885/99
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Алекс, если ты помнишь, Petr не использует RTOS, поэтому твой совет ему не поможет решить вопрос. Работа с LwIP стеком с RTOS и без неё отличается. Хорошо бы услышать ответ Петра на этот вопрос .
Я очень хорошо это помню и поэтому сижу и молчу в тряпочку (ну до этого по крайней мере), а то что недавно тут ранее написал, то так - по теме и для самой темы больше (чтобы тема не "развалилась" от ухода в другую сторону). И когда он в л/с мне писал - тоже не затрагивал этот вопрос фактически. Больше не буду лишнего писать чтобы некоторые не решенные вопросы не "утонули" уже в потоке постов.
AleksBak вне форума   Ответить с цитированием
Старый 30.03.2016, 11:11   #15
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от smart_pic Посмотреть сообщение
Как я понял суть вопроса Petr .
Микрочиповский стек позволяет генерить динамически изменяемые html странички. Petr пожелал идти дальше и генерить странички для каждого входящего подключения индивидуально. Зачем ему это надо - другая тема. И не важно с одного компа идет несколько подключений или это разные компы с разными IP. Такая ситуация имеет место быть.
Правильно? Petr
И да и нет одновременно!

Поясню подробнее.
Я не генерю разные страницы для каждого конкретного соединения.
Хотя это тоже абсолютно нормальная ситуация и потребность может возникнуть.

Но действительно я для каждого индивидуального TCP соединения создаю
некий набор параметров динамически(с выделением памяти).
В данном конкретном случае я реализую FTP сервер.
И каждый пользователь конечно имеет разное состояние сервера.
Это и прохождение авторизации и разные текущие каталоги и
разные связанные соединения данных, открытые уже сервером
по запросу клиента и указанному им порту. И так далее.
При поступлении команды или разрыве соединения эта структура
выгружается из памяти.

Разумеется такой подход необходим при реализации протоколов
не ограничивающихся запрос-ответ (к ним относятся HTTP и ModBus)
и то только в некоторой степени, а подразумевающих
длительный обмен связанными командами.
И вообще данный подход и является основным как в жизни,
так и в LwIP.

Разработчик LwIP (тот швед) реализовал для этого механизм обмена
ссылками arg для упрощения и вообще реализации данного механизма.

Ярчайшим примером может служить WEB сервер от ST (что от моего примера, что из Куба). В Кубе этот сервер посложнее, но суть та же.
Там также реализован механизм контекстов с использованием аргумента.
При открытии соединения (в функции http_accept) выделяется память под структуру hs = mem_malloc(sizeof(struct http_state));
и далее ссылка на нее передается стеку:
tcp_arg(pcb, hs);
При этом надо понимать, что стек при вызове функций не просто так передает ссылки на pcb!
Для каждого нового TCP соединения стек создает новую копию pcb (тоже структура)
тем же выделением памяти из кучи.
Далее для каждого соединения при приходе пакета или по другому событию
вызывается некий обработчик и ему передается ссылка arg (которую мы дали стеку!)
В сервере ST там структура с ссылкой на файл и точкой чтения файла.
При каждом вызове передается следующий кусок запрошенного файла и двигается точка чтения.
Как только файл передан - соединения закрывается, pcb уничтожает стек а структура hs (ссылка в arg) выгружается в WEB сервере(там, где и создалась).
В итоге для разных TCP соединений от браузера создаются разные структуры и каждое соединение передает свой файл с разной скоростью и вообще как бы "по факту". А точнее по факту прихода ответных ACK фреймов.
И разумеется много разных pcb и разных hs(привязаны индивидуально к каждому pcb) существуют
одновременно и работают одновременно в рамках жизни TCP соединения.
Но это не значит, что функции обработчиков вызываются прерывая друг друга.
Конечно нет. Они вызываются поочередно в одном и том же прерывании DMA при обработке очередного
фрейма, полученного из сетки. Это уже относится к конкретной реализации PHY уровня.
Кстати да - надо помнить, что все обработчики вызываются из прерываний.

Вот так НАДО делать и так ВСЕ и ДЕЛАЮТ.
Ну разумеется кроме тех, кто не вкурил этот очевидный механизм.

Ну вот я вроде заметил глюк. Пока проверяю. Задал вопрос.
Но оказывается народ просто пишет софт, похожий на пример,
но сути происходящего не понимает особо.

Последний раз редактировалось Petr; 30.03.2016 в 11:23.
Petr вне форума   Ответить с цитированием
Старый 30.03.2016, 11:37   #16
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Petr Посмотреть сообщение
И да и нет одновременно!

Поясню подробнее.
Петр, без обид, но все, что написано можно назвать "детализацией фантастического бреда". smart_pic не использует LwIP-стек, он использует TCP/IP-стек Microchip, даже не знаю информативно ли такое сообщение для него, вообще, да еще с учетом стиля "и да и нет одновременно...". Вроде как пришел к выводу, что вы пытаетесь реализовать некое подобие виртуальной машины, когда каждый пользователь получает свою копию чего-то и работает с этой копией, при этом копии полностью изолированные, чтобы не портить данные других пользователей. Что-то похожее используется в VirtualBox, когда можно в одной операционной системе запустить две других, и каждая из них не влияет на другую. В серверах что-то похожее есть (виртуализация, наверное, на Linux), а вы это хотите реализовать на STM32F107 и LwIP, и без использования RTOS для MCU? Поподробнее можно?
Цитата:
Сообщение от Petr Посмотреть сообщение
Ну вот я вроде заметил глюк. Пока проверяю. Задал вопрос.
Но оказывается народ просто пишет софт, похожий на пример,
но сути происходящего не понимает особо.
Я сильно не вникал в работу стека, не правил его, мне достаточно, чтобы клиенты подключались и читали правильно. В таком объеме мне достаточно. И я сначала изменил пример, добавил ModbusTCP, затем протестировал его работу с несколькими клиентами, затем добавил этот код в другой проект. Уточню, что в Modbus нет авторизации и все клиенты получают равный доступ к данным. TCP-соединения могут длительное время существовать, вроде, проблем не было.
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 30.03.2016 в 11:43.
Pridnya вне форума   Ответить с цитированием
Старый 30.03.2016, 11:51   #17
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Петр, без обид, но все, что написано можно назвать "детализацией фантастического бреда". smart_pic не использует LwIP-стек, он использует TCP/IP-стек Microchip, даже не знаю информативно ли такое сообщение для него, вообще, да еще с учетом стиля "и да и нет одновременно...". Вроде как пришел к выводу, что вы пытаетесь реализовать некое подобие виртуальной машины, когда каждый пользователь получает свою копию чего-то и работает с этой копией, при этом копии полностью изолированные, чтобы не портить данные других пользователей. Что-то похожее используется в VirtualBox, когда можно в одной операционной системе запустить две других, и каждая из них не влияет на другую. В серверах что-то похожее есть (виртуализация, наверное, на Linux), а вы это хотите реализовать на STM32F107 и LwIP, и без использования RTOS для MCU? Поподробнее можно?
Да, именно так. Каждый пользователь имеет изолированное состояние
сервера и работает только с ним.
Я это делаю на STM32F107 и LwIP.
Называть это виртуальными машинами слишком громко конечно.
Просто обычный подход. Тем более, что он штатный для стека LwIP.

Я говорю, это не что то хитрое! Это просто штатное использование LwIP,
активно используемое во всех примерах от ST.
Просто в документации на стек это не озвучено (как очевидное),
и в примерах ST есть только краткие комментарии.
Но суть то видна сразу.
И в принципе все четко работает.
Какая то непонятка возникает только при работе с одного IP к одному порту (но от разных).
Пока логами перепроверяю.

Опыт использования микрочиповского стека немного тут сбивает с толку.
Надо понимать, что там реализовали идеологию СОКЕТОВ.
А pcb это НЕ сокеты и даже не что то подобное.
Идеологически это абсолютно разные вещи.

На самом деле идея то простая. К каждому pcb (а их столько разных, сколько разных TCP соединений) привязывается ссылка arg (тупо поле в структуре). И далее обработчик берет эту ссылку, кастует при получении.
Пример из WEB сервера ST:

Код:
static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
  int i, j;
  char *data;
  char fname[40];
  struct fs_file file = {0, 0};
  struct http_state *hs;

  hs = arg;
и использует свою структуру для работы с данным отдельно взятым юзером.

Да, и забыл отметить.
В данной идеологии использование глобальных переменных для хранения
состояния сервера выглядит уже как бы... неправильным.
Ввиду того, что оное различно для каждого конкретного юзера.
В ModBus это незаметно из за идеологии самого модбаса.

Последний раз редактировалось Petr; 30.03.2016 в 12:06.
Petr вне форума   Ответить с цитированием
Старый 30.03.2016, 11:53   #18
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,125
Вес репутации: 2885/99
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
... smart_pic не использует LwIP-стек, он использует TCP/IP-стек Microchip, даже не знаю информативно ли такое сообщение для него...
В микрочиповском стеке все "дубово" и "железно". Просто глобально существуют всегда соотв. структуры для TCP соединений когда для них с соотв. дефайнами собирали проект. И все. А тут Petr имел ввиду - использование mem_malloc и т.п. Не какой-то непонятный VirtualBox и "выстрелы тысячи орудий"©. И еще хорошо бы потом про static функции спросить ему тоже бы.
AleksBak вне форума   Ответить с цитированием
Старый 30.03.2016, 12:04   #19
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Petr Посмотреть сообщение
И в принципе все четко работает.
Какая то непонятка возникает только при работе с одного IP к одному порту (но от разных).
Тогда в моем случае можно проверить так: запустить на компе два-три ModbusTCP-клиента, для каждого из них установить соединение с ModbusTCP-сервером, при этом запросы от клиентов будут поступать с одного IP 192.168.1.10, но с разных портов (для каждого клиента система выбирает исходящий порт, я его не задаю), сервер же будет принимать запросы на IP 192.168.1.100 на порт 502, а LwIP-стек будет разруливать эту ситуацию (чтобы приходили кому нужно). Так оно так и работает. Я не понимаю, что мне сделать, чтобы обнаружить такую же непонятку? Или у меня она никак не проявится?
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 30.03.2016, 12:13   #20
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Тогда в моем случае можно проверить так: запустить на компе два-три ModbusTCP-клиента, для каждого из них установить соединение с ModbusTCP-сервером, при этом запросы от клиентов будут поступать с одного IP 192.168.1.10, но с разных портов (для каждого клиента система выбирает исходящий порт, я его не задаю), сервер же будет принимать запросы на IP 192.168.1.100 на порт 502, а LwIP-стек будет разруливать эту ситуацию (чтобы приходили кому нужно). Так оно так и работает. Я не понимаю, что мне сделать, чтобы обнаружить такую же непонятку? Или у меня она никак не проявится?
Все правильно. Именно такая обстановка.
Проявится или нет не знаю.
Но если есть возможность выводить в лог куда то (по usart или подобное)
то можно при поступлении запроса от юзера вываливать в лог номер pcb и сам запрос.
И по логу посмотреть не путает ли LwIP запросы и pcb.
Т.е. допустим подключился 1-й клиент - видим в логе ссылку на pcb (она выделилась для этого)
Подключается второй - у него своя ссылка на pcb.
И смотрим в логе чтоб запрос от 5-го не попал на pcb от 2-го.
Должно все абсолютно четко разруливаться.
Там сепарация пакетов идет как раз по исходящим портам (ну как и задумано в TCP конечно).

Т.е. вроде (я не утверждаю) наблюдал неправильную сепарацию пакетов
по копиям pcb (т.е. смешение данных разных TCP коннектов).
Что конечно серьезный глюк, если это верно.
Petr вне форума   Ответить с цитированием
Старый 30.03.2016, 14:18   #21
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Petr Посмотреть сообщение
Все правильно. Именно такая обстановка.
Проявится или нет не знаю.
Но если есть возможность выводить в лог куда то (по usart или подобное)
то можно при поступлении запроса от юзера вываливать в лог номер pcb и сам запрос.
И по логу посмотреть не путает ли LwIP запросы и pcb.
Т.е. допустим подключился 1-й клиент - видим в логе ссылку на pcb (она выделилась для этого)
Подключается второй - у него своя ссылка на pcb.
И смотрим в логе чтоб запрос от 5-го не попал на pcb от 2-го.
Должно все абсолютно четко разруливаться.
Там сепарация пакетов идет как раз по исходящим портам (ну как и задумано в TCP конечно).

Т.е. вроде (я не утверждаю) наблюдал неправильную сепарацию пакетов
по копиям pcb (т.е. смешение данных разных TCP коннектов).
Что конечно серьезный глюк, если это верно.
Нашел свой ModbusTCP-сервер для DevKit407, IP сервера 192.168.1.101, порт 502.
Запускаю три ModbusTCP-клиента, каждый из них устанавливает соединение с ModbusTCP-сервером, читает данные функцией ReadHoldingRegisters. Все три клиента читают правильно, клиенты написаны на C# и используют NetFramework, кстати, я помню, что вы его не используете. А чем вы тестируете со стороны компа?
Смотрю в диспетчере устройств PID процессов, вижу в диспетчере три мои процесса:
mbTCP2010wf.exe PID1908
mbTCP2010wf.exe PID2708
mbTCP2010wf.exe PID3208
Запускаю netstat.exe -nb и вижу шесть активных TCP-соединений с разных портов (После IP-адреса и двоеточия номер порта клиента и сервера). Каждый процесс создает два TCP-соединения.

Цитата:
C:\Documents and Settings\Demetrius>netstat -nb

Активные подключения

TCP 192.168.1.10:3953 192.168.1.101:502 ESTABLISHED 2708 [mbTCP2010wf.exe]

TCP 192.168.1.10:3954 192.168.1.101:502 ESTABLISHED 2708 [mbTCP2010wf.exe]

TCP 192.168.1.10:3955 192.168.1.101:502 ESTABLISHED 1908 [mbTCP2010wf.exe]

TCP 192.168.1.10:3956 192.168.1.101:502 ESTABLISHED 1908 [mbTCP2010wf.exe]

TCP 192.168.1.10:3957 192.168.1.101:502 ESTABLISHED 3208 [mbTCP2010wf.exe]

TCP 192.168.1.10:3958 192.168.1.101:502 ESTABLISHED 3208 [mbTCP2010wf.exe]
PS: DevKit407 имеет на борту COM-порт, в который можно выводить отладочную информацию функцией printf(), COM-порт подсоединен к компу, на компе программа, которая слушает его, видит ASCII-строки. Большого смысла не вижу копаться (выводить номера pcb или что вы там выводите) т.к. все три клиента читают правильно.
Миниатюры
Три клиента.PNG   PID процесса.PNG   Активные подключения.PNG   Запрос-ответ отладка.PNG  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 30.03.2016 в 14:29.
Pridnya вне форума   Ответить с цитированием
Старый 30.03.2016, 15:11   #22
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Большого смысла не вижу копаться (выводить номера pcb или что вы там выводите) т.к. все три клиента читают правильно.

Так и не нужно было ничего делать раз "Большого смысла не вижу копаться (выводить номера pcb или что вы там выводите)"
и писать столько букв тоже не нужно было

Поскольку раз вы динамически память не выделяете - оно вам не надо.
Поскольку сделали именно модбас - оно вам не надо.
Если глюк есть - оно вам не надо.
Если глюка нет - оно вам не надо.

Оно надо только в описанной мной ситуации.
И никак не может проявиться в модбасе по определению,
тем более, что динамически память под соединение не выделяете.
И кстати соединение, как я понял, закрывает клиент а не сервер.
Это тоже ситуация, когда глюк мог бы проявиться.
Если бы сервер принимал решение закрывать соединение
допустим после запроса некого конкретного регистра,
то это выглядело бы как отключение "не того" клиента.
Т.е. того, который "волшебный" регистр не спрашивал.
И извне не видно
Видно только если выводить ненужные вам ссылки на pcb.
Вот и все пироги.

Я отпишусь потом есть реально этот глюк или нет.
Это будет важно тому, кому оно надо.
Пока другими делами занялся.
Petr вне форума   Ответить с цитированием
Старый 30.03.2016, 15:32   #23
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Petr Посмотреть сообщение
Так и не нужно было ничего делать раз "Большого смысла не вижу копаться (выводить номера pcb или что вы там выводите)" и писать столько букв тоже не нужно было
Ну из принципа (установить истину) я могу и ссылки вывести на pcb. Как их выводить? Я их не разу не выводил, нужды не было, но могу вывести функцией printf() прямо в COM-порт.

Цитата:
Сообщение от Petr Посмотреть сообщение
Поскольку раз вы динамически память не выделяете - оно вам не надо.
Поскольку сделали именно модбас - оно вам не надо.
Если глюк есть - оно вам не надо.
Если глюка нет - оно вам не надо.

Оно надо только в описанной мной ситуации.
И никак не может проявиться в модбасе по определению,
тем более, что динамически память под соединение не выделяете.
Динамически память выделяется в самом стеке и еще в файле tcp_echoserver.c. Я как-то забыл про это
Код:
  /* allocate structure es to maintain tcp connection informations */
  es = (struct tcp_echoserver_struct *)mem_malloc(sizeof(struct tcp_echoserver_struct));
Цитата:
Сообщение от Petr Посмотреть сообщение
И кстати соединение, как я понял, закрывает клиент а не сервер.
...
Это будет важно тому, кому оно надо.
Пока другими делами занялся.
Соединение закрывает клиент.

Все как у вас, только работает. Этот глюк есть только у вас, похоже. Как вам вывести ваши ссылки на pcb?
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 30.03.2016, 15:43   #24
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 46
Сообщений: 1,734
Вес репутации: 3438/91
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Соединение закрывает клиент.

Все как у вас, только работает. Этот глюк есть только у вас, похоже. Как вам вывести ваши ссылки на pcb?
Так в том то и дело, что совсем не так.
Конечно клиент может закрыть FTP соединение.
Но если клиент пошлет команду QUIT,
то сервер должен сам закрыть соединение по порту 21.
И все клиенты команду честно шлют в конце сеанса.

А закрывается "не его" соединение.
Вот так у меня и проявился глюк.

А pcb выводить то просто. Это же ссылка(адрес в памяти).
В STM32 это unsigned long число.
Его нужно преобразовать в строку и слать в лог спокойно.
Petr вне форума   Ответить с цитированием
Старый 30.03.2016, 15:47   #25
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Снова вопрос по LwIP

Цитата:
Сообщение от Petr Посмотреть сообщение
А pcb выводить то просто. Это же ссылка(адрес в памяти).
В STM32 это unsigned long число.
Его нужно преобразовать в строку и слать в лог спокойно.
Т.е.выводить нужно адрес pcb. Т.е. где в коде мне добавить вывод этого адреса, чтобы было как у вас? И что с адресом pcb дальше делать? Здесь?
Код:
/**
  * @brief  Initializes the tcp echo server
  * @param  None
  * @retval None
  */
void tcp_echoserver_init(void)
{
  /* create new tcp pcb */
  tcp_echoserver_pcb = tcp_new();

  if (tcp_echoserver_pcb != NULL) {
    err_t err;
    
    /* bind echo_pcb to port TCP_PORT (ECHO protocol) */
        err = tcp_bind(tcp_echoserver_pcb, IP_ADDR_ANY, TcpPort);
        
    if (err == ERR_OK) {
      /* start tcp listening for echo_pcb */
      tcp_echoserver_pcb = tcp_listen(tcp_echoserver_pcb);
      
      /* initialize LwIP tcp_accept callback function */
      tcp_accept(tcp_echoserver_pcb, tcp_echoserver_accept);
    } else {
      printf("Can not bind pcb\n");
    }
  } else {
    printf("Can not create new pcb\n");
  }
}
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И снова вечер добрый, уважаемые знатоки....Вопрос по LF398 FuLLLeR Вопросы начинающих 1 15.05.2010 08:51
еще один вопрос по контроллеру опережения зажигания на pic 16f84a 4,0мгц дмитрий626 Вопросы начинающих 6 26.12.2009 09:08
вопрос по PICC EXT_INT Вопросы начинающих 13 26.08.2008 07:53
Вопрос новичка по Си ramonchik Продукция MICROCHIP 3 05.03.2007 16:28


Часовой пояс GMT +3, время: 15:53.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot