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

LwIP TCP-сервер и UDP-клиент на одном MCU+LAN8720A?

Всем привет!

 

Проект без операционной системы с LwIP-стеком (low-level "core" / "callback" or "raw" API) на одном микроконтроллере (основная программа + TCP-сервер (Modbus TCP)), работает.

 

Меня интересует, можно ли в этот проект добавить еще и UDP-клиент (SNTP-клиент) и не будет ли TCP-сервер конфликтовать с UDP-клиентом?

По отдельности TCP-сервер работает, UDP-клиент работает, а как все вместе совместить (в проект c TCP-сервером добавить UDP-клиент)? Я еще с такой задачей не сталкивался, поэтому сильно не ругайте.

 

Если что, то в качестве PHY используется LAN8720A, разъем RJ45 один, проект на STM32, но микроконтроллер пока не важен, меня интересует сама возможность совмещения серера и клиента.

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


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

Меня интересует, можно ли в этот проект добавить еще и UDP-клиент (SNTP-клиент) и не будет ли TCP-сервер конфликтовать с UDP-клиентом?

Не представляю, почему вы решили, что нельзя. У меня как раз lwip, no OS, raw API. Имеется веб сервер, агент SNMP, клиент SNTP.

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


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

Не представляю, почему вы решили, что нельзя. У меня как раз lwip, no OS, raw API. Имеется веб сервер, агент SNMP, клиент SNTP.

Я еще не сталкивался с подобной задачей (совместить сервер и клиент). Все примеры, которые я видел содержат либо сервер, либо клиент. Вот поэтому я и задал вопрос "а будут ли они оба работать и не мешать одно другому". К тому же у некоторых видел в приборах два разъема RJ45, а в описании, что один для синхронизации времени, а второй еще для чего-нибудь. Запутался.

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


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

Не представляю, почему вы решили, что нельзя. У меня как раз lwip, no OS, raw API. Имеется веб сервер, агент SNMP, клиент SNTP.

scifi, посмотрите личную почту!

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


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

...совмещения серера и клиента.

 

логическое дробление в данном случае не накладывает никаких ограничений на реализацию.

в Ваших вопросах сквозит просьба увидеть готовый пример.

хочется процитировать один мультик:

 

- "Вы и есть за меня будете?!"

- "Ага!"

 

удачи Вам

(круглый)

 

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


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

логическое дробление в данном случае не накладывает никаких ограничений на реализацию.

в Ваших вопросах сквозит просьба увидеть готовый пример.

Вы похоже не представляете как выглядит готовый пример в моем случае. У меня основная программа и ModbusTCP сервер уже занимают около 130 килобайт. Мне нужно добавить в программу UDP-клиента (SNTP-клиента). Я ожидал увидеть что-то типа такого. И пояснение "расположите код там-то, не забудьте настроить это".

// UDP Server Initialisierung:

upcb = udp_new();

if (upcb)

{

udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);

udp_recv(upcb, udp_server_receive_callback, NULL);

}

 

// TCP Server Initialisierung:

tpcb = tcp_new();

if (tpcb != NULL)

{

tcp_bind(tpcb, IP_ADDR_ANY, TCP_SERVER_PORT);

tpcb = tcp_listen(tpcb);

tcp_accept(tpcb, tcp_callback_accept);

}

хочется процитировать один мультик:

 

- "Вы и есть за меня будете?!"

- "Ага!"

[CENSORED]

Изменено пользователем IgorKossak
переход на личности, бан на неделю

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


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

Вы похоже не представляете как выглядит готовый пример в моем случае. У меня основная программа и ModbusTCP сервер уже занимают около 130 килобайт. Мне нужно добавить в программу UDP-клиента (SNTP-клиента). Я ожидал увидеть что-то типа такого. И пояснение "расположите код там-то, не забудьте настроить это".

.... детский сад skip'нут ....

Да хоть 500 кБ. Колобок в чем-то прав - вы просто не понимаете как работает TCP/UDP/IP и хотите готовый рецепт. Да там под сотню настроек и все надо не забыть. Возьмите готовые примеры и посмотрите как сделано в нём, совместить дело пяти минут. Или вот на другом процессоре совмещенный.

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


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

Да хоть 500 кБ. Колобок в чем-то прав - вы просто не понимаете как работает TCP/UDP/IP и хотите готовый рецепт. Да там под сотню настроек и все надо не забыть. Возьмите готовые примеры и посмотрите как сделано в нём, совместить дело пяти минут. Или вот на другом процессоре совмещенный.

Упоминание об объеме проекта с TCP-стеком (основная программа + ModbusTCP), который у меня работает, означало, что мне не нужен чей-то пример, как студенту для кусовика. Я тоже могу написать, что вы не понимаете, как работает TCP/UDP/IP, LwIP-стек на STM32F407 без операционной системы т.к. советуте мне почитать AN3966 Application note LwIP TCP/IP stack demonstration for STM32F4x7 microcontrollers, которую я уже много раз перечитал и из которой мне уже взять нечего. В этом документе описаны общие сведения о вариантах использования стека (три вида API) и о примерах (9 отдельных примеров). Все примеры по даны для конкретного использования, т.е. там не как в стеке Microchip, когда стек конфигурируется утилитой и мы получае сразу несколько вариантов использования. По отдельности я пробовал запускать все эти примеры, но мне нужно то, что указано в теме (совместить или добавить к TCP-серверу UDP-клиент). В примерах от ST для каждого варианта использования стека (9 примеров) есть свой проект (отдельный) , т.е. там не все варианты сразу, которые можно директивами условной компиляции включить/выключить из кода ( или той сотней настроек, про которую вы упоминаете).

This demonstration package contains nine applications running on top of the LwIP stack:

Applications running in standalone mode (without an RTOS):

–A Web server

–A TFTP server

–A TCP echo client application

–A TCP echo server application

–A UDP echo client application

–A UDP echo server application

Applications running with the FreeRTOS operating system:

–A Web server based on netconn API

–A Web server based on socket API

–A TCP/UDP echo server application based on netconn API

Кроме того вы упоминаете о сотне настроек, а из этой сотни менять мало что нужно. Это еще один аргумент в мою пользу.

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

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


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

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

Кстати, вот вам родной клиент SNTP. Читайте, вникайте.

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


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

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

Кстати, вот вам родной клиент SNTP. Читайте, вникайте.

Спасибо! У меня жалоб на LwIP-стек нет. Я перед использованием LwIP разобрал до мелочей как работает TCP-сервер, UDP-клиент, все запросы и ответы (до битов в байтах). Разобрался с протоколами ARP, ICMP, DNS, TCP, UDP, SNTP (основан на UDP). Написал свой клиент на C# для Windows, считал время с публичного NTP-сервера в Интернете (российские и европейские сервера), затем попробовал использовать в качестве NTP-сервера службу времени Windows, все работает. И захотел к своему проекту (STM32F407 плюс LwIP ModbusTCP-сервер )добавить SNTP-клиент. Код клиента, который вы предложили посмотреть я видел, он появился в LwIP v.1.4.1, а у меня LwIP v.1.3.2. Похоже, что придется версию стека менять.

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

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


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

Упоминание об объеме проекта с TCP-стеком (основная программа + ModbusTCP), который у меня работает, означало, что мне не нужен чей-то пример, как студенту для кусовика.

Мда...., если бы вы знали какие объемы пишут студенты, вы бы не приводили такие аргументы. Объем о качестве специалиста ничего не говорит.

У меня программа в 160 кБ, хотя я написал всего 2кБ и что?

 

По отдельности я пробовал запускать все эти примеры, но мне нужно то, что указано в теме (совместить или добавить к TCP-серверу UDP-клиент).

т.е. второй пример, где всё совмещено, вы даже не открывали? Ну тогда ничем не могу вам помочь.

 

Кроме того вы упоминаете о сотне настроек, а из этой сотни менять мало что нужно. Это еще один аргумент в мою пользу.

В какую пользу? Это вам надо разобраться, а не мне....

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


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

т.е. второй пример, где всё совмещено, вы даже не открывали? Ну тогда ничем не могу вам помочь.

 

Если вы про TFTP-сервер, то я этот пример не открывал и вообще с FTP протоколом еще не работал. Я запускал по отдельности UDP-клиент, UDP-сервер, TCP-клиент, TCP-сервер. Мне нужно то, что указано в теме. А так вообще интересный путь: есть 6 примеров

1) –A Web server

2) –A TFTP server

3) –A TCP echo client application

4) –A TCP echo server application

5) –A UDP echo client application

6) –A UDP echo server application

чтобы совместить 4-й и 5-й, нужно разобраться как работает 2-й. Хоть бы кто ссылку дал на TCP-сервер плюс UDP-клиент.

 

PS: Так на ум приходит тоже пример STM32F4 USB RNDIS драйвер (управление устройством через Web-интерфейс), там Сергей Фетисов через USB работает по WEB-интерфейсу. Его пример рабочий, использует LwIP, Я его код проверял в работе на STM32F4DISCOVERY. Или его же Ethernet поверх USB на STM32F4.

 

PPS: А я хотел бы видеть

7) –A TCP echo server application + A UDP echo client application

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

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


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

т.е. второй пример, где всё совмещено, вы даже не открывали? Ну тогда ничем не могу вам помочь.

Вот спасибо! Этого примера (IAP over Ethernet) не было на CD-диске к моей отладочной плате (DevKit407). Пример с сайта ST вообще для другой отладочной платы, на которой установлен PHY DP83848, она подключена по MII-интерфейсу, а у меня только RMII (LAN8720A). Но все равно спасибо! :laughing: В примере TFTP работает поверх UDP, а HTTP поверх TCP. Есть что посмотреть. :rolleyes:

 

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


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

Я запускал по отдельности UDP-клиент, UDP-сервер, TCP-клиент, TCP-сервер.
Если у вас в программе была поддержка DHCP, то UDP-сервер и UDP-клиент, работающие одновременно с вашим TCP-сервером, у вас были. Странно, что вы этого не заметили. После этого слабо верится в:

Я перед использованием LwIP разобрал до мелочей как работает TCP-сервер, UDP-клиент, все запросы и ответы (до битов в байтах). Разобрался с протоколами ARP, ICMP, DNS, TCP, UDP, SNTP (основан на UDP).

 

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


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

...можно ли в этот проект добавить еще и UDP-клиент (SNTP-клиент) и не будет ли TCP-сервер конфликтовать с UDP-клиентом?

... а как все вместе совместить (в проект c TCP-сервером добавить UDP-клиент)?...меня интересует сама возможность совмещения серера и клиента.

 

1) можно, не будет. т.к. см. выше моё предыдущий пост. Или скажем по другому => в RFC если это не запрещено - то однозначно МОЖНО.

2) пишется обработчик и разбор одного протокола, потом второго. Можно взять кота в мешке, тьху готовый серый ящик. Можно сделать его прозрачным,

можно вообще по мотивам написать более скоростной и компактный - тут поле для творчества вагон и маленькая кружка.

3) Ваш проект (с точки зрения наполнения логикой) очень и очень прост. Кстати совет дня (попробуйте написать модбас сервер, чтоб можно потом только декларотивно добавлять сколько

угодно функций-адресов) Поверьте - у Вас много кода сократиться... ;)

 

я всё правильно ответил на поставленные Вами вопросы?

только боюсь Вам от этого вряд-ли полегчало...

 

удачи Вам

(круглый)

 

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


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

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

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

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

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

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

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

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

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

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