|
|
  |
STM32F407+LwIP_v.1.3.2+sntp.c из LwIP_v1.4.1 (Raw API) |
|
|
|
Nov 9 2016, 08:27
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159

|
Всем привет!
Есть рабочий проект на STM32F407 с использованием LwIP_v1.3.2 (без RTOS, Raw API). На нем работают: ModbusTCP-сервер и UDP-клиент (1 раз в 4 секунды отправляет строку на IP, Port). UDP-клиента нужно заменить на SNTP-клиента. Есть готовый код - файлы sntp.h и sntp.c из LwIP_v1.3.0\apps\ но он испльзует сокеты, поэтому не подходит, есть код LwIP_v1.4.1\apps\ этот код для Raw API, но он тестировался с новой версией стека LwIP_v1.4.1 и использует еще файлы timer.h и timers.c, которых нет в LwIP_v1.3.2. Просто заменить стек один на другой не получается - проект не собирается, в новом стеке все файлы изменились. Что проще сделать? Ручками переписать UDP-клиента под SNTP-клиента используя LwIP_v1.3.2 или заменить LwIP_v1.3.2 на более новый LwIP_v1.4.1 и использовать из него sntp.c и sntp.h, которые вроде как должны с ним работать?
Сообщение отредактировал Pridnya - Nov 9 2016, 08:30
|
|
|
|
|
Nov 9 2016, 08:52
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159

|
Цитата(scifi @ Nov 9 2016, 11:39)  Если боитесь трогать lwip "потому что не собирается", то проще, конечно, заново изобрести клиента SNTP. Вообще, трудно себе представить что-либо проще, чем SNTP. Разве что простой пинг проще, наверное. Я не боюсь, просто замучался с переходом от одной версии к другой. Даже не подозревал, что там все исходники заменили, а синтаксис такой ,что черт ногу сломет, куча переопределений, три вида API, а мне самый низкоуровневый нужен, самый простой. Такое ощущение, что этот LwIP-стек генератором кода написали с какого-то другого языка, или как минимум обработали исходники для ухудшения чтения и понимания. SNTP-клиент, если он как клиент работает - запрашивает время у NTP-сервера, то вроде как все просто: запрос-ответ. Но если в сети много клиентов, то такой режим не удобен. А если он в режиме получения широковещательных запросов (с метками времени) работает, то ему еще и этот режим добавлять нужно. Наверное, нужно оба режима реализовывать. Первый я могу чисто алгоритмически, а вот второй режим еще не пробовал, это ж нужно, чтобы кто-то рассылал метки времени в сеть. Может, какой программный эмулятор есть?
Сообщение отредактировал Pridnya - Nov 9 2016, 08:57
|
|
|
|
|
Nov 9 2016, 09:15
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Pridnya @ Nov 9 2016, 11:52)  Я не боюсь, просто замучался с переходом от одной версии к другой. Даже не подозревал, что там все исходники заменили, Неправда, далеко не все. Часть файлов переместили, timers.c b timers.h переименовали в timeouts.c, timeouts.h. Мне исходники править не пришлось. Какая там версия последняя - я даже не знаю. В файлах из репозитория я не нашел упоминания номера версии. Какой смысл держаться за старую версию? Добавлено: нашел упоминание о номере версии в lwip/init.h. Она там 2.0.0.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 9 2016, 09:31
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159

|
Цитата(scifi @ Nov 9 2016, 12:13)  Конечно есть. И не эмулятор, а нормальный NTP сервер. Берём линуксовый компьютер, устанавливаем ntpd, настраиваем - и вперёд. Компьютера с Linux нет. А NTP Time Server Monitor (работает в Windows) от Meinberg это не то же самое? Цитата(scifi @ Nov 9 2016, 12:19)  Тогда уж сразу прыгать на v2.0.0 (сейчас Release Candidate 2). Там есть какие-то изменения семантики. Но это ж надо понимать, что там и как. А человек просто нажал кнопочку - и куб ему что-то выплюнул. Это совсем другая история. Я CubeMX не использую. У меня был проект, который что-то делал и имел два интерфейса (USB-UART-мост и RS485, протоколы ModbusRTU), я к этому проекту добавил интерфейс Ethernet, добавил tcp-сервер на основе lwip_v1.3.2, затем добавил ModbusTCP. Проект нормально работает. Затем понадобилось кроме ModbusTCP добавить SNTP и здесь я узнал, что для моей версии стека есть файлы sntp.h и sntp.c (из contrib_v1.3.0), но они для сокетов. Есть файлы для Raw API, но они для другой версии стека - v1.4.1. Цитата(Сергей Борщ @ Nov 9 2016, 12:15)  Неправда, далеко не все. Часть файлов переместили, timers.c b timers.h переименовали в timeouts.c, timeouts.h. Мне исходники править не пришлось. Какая там версия последняя - я даже не знаю. В файлах из репозитория я нешел упоминания номера версии.
Какой смысл держаться за старую версию? Смысл держаться - зачем менять весь стек, если нужно добавить только SNTP-клиента, тем более, что UDP-клиент уже работает. Да, удобно смотреть разницу между версиями (теоретически) (было просто на бумаге да забыли про овраги), смотрю и вижу, что у всех файлов дата создания одинаковая, делаю вывод, что файлы обрабатывались текстовым процессором, только в этом случае может быть одинаковая дата. Ведь редактировались файлы в разное время. И от версии к версии все файлы разные (справа от имени размер и дата): Код // sntp.c из lwip_v1.4.1 (включаемые файлы) #include "lwip/opt.h" #include "sntp.h" #include "lwip/timers.h" #include "lwip/udp.h" #include "lwip/dns.h" #include "lwip/ip_addr.h" #include "lwip/pbuf.h" #include <string.h> #include <time.h>
//lwip_v1.4.1 lwip_v1.3.2 lwip_1.4.1\src\include\lwip\opt.h 58576, 09.02.15 11:31:54 lwip_1.3.2\src\include\opt.h 50583, 02.09.12 21:30:14 lwip_1.4.1\apps\sntp.h 177, 09.02.15 11:31:54 --- --- lwip_1.4.1\src\include\lwip\timers.h 3290, 09.02.15 11:31:54 --- --- lwip_1.4.1\src\include\lwip\udp.h 6046, 09.02.15 11:31:54 lwip_1.3.2\src\include\udp.h 5426, 02.09.12 21:30:14 lwip_1.4.1\src\include\lwip\dns.h 5723, 09.02.15 11:31:54 lwip_1.3.2\src\include\lwip\dns.h 4762, 02.09.12 21:30:14 lwip-1.4.1\src\include\ipv4\lwip\ip_addr.h 9740, 09.02.15 11:31:54 lwip-1.3.2\src\include\ipv4\lwip\ip_addr.h 6884, 02.09.12 21:30:14 lwip-1.4.1\src\include\ipv4\lwip\pbuf.h 6526, 09.02.15 11:31:54 lwip-1.3.2\src\include\ipv4\lwip\pbuf.h 4022, 02.09.12 21:30:14 Цитата(Сергей Борщ @ Nov 9 2016, 12:15)  Неправда, далеко не все. Часть файлов переместили, timers.c b timers.h переименовали в timeouts.c, timeouts.h. Мне исходники править не пришлось. Какая там версия последняя - я даже не знаю. Вы про какую версию стека пишете? Файлов timers.h и timers.c нет в lwip_v1.3.2 Они есть в lwip_v1.4.1. Файлов timeouts.c, timeouts.h нет ни в lwip_v1.3.2, ни в lwip_v1.4.1. Все понял с вами (судя по количеству созданных вами тем и тематике на этом форуме).Я такк бы мог спросить и у замначальника по разным вопросам, от клининга до адаптивных цифровых фильтров (должность одного лица).
Сообщение отредактировал Pridnya - Nov 9 2016, 09:56
|
|
|
|
|
Nov 9 2016, 09:48
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Pridnya @ Nov 9 2016, 12:31)  Смысл держаться - зачем менять весь стек, если нужно добавить только SNTP-клиента, тем более, что UDP-клиент уже работает. Может стоит заглянуть в баг-трекер, чтобы увидить, сколько и каких ошибок там за это время исправлено? Может вам просто повезло, что вы на них еще не наткнулись в своем устройстве. Я не настолько удачливый, на пару-тройку натыкался. QUOTE (Pridnya @ Nov 9 2016, 12:31)  Вы про какую версию стека пишете? Видимо я сравниваю 1.5.0 и 2.0.0
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 9 2016, 09:52
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159

|
Цитата(Сергей Борщ @ Nov 9 2016, 12:48)  Может стоит заглянуть в баг-трекер, чтобы увидить, сколько и каких ошибок там за это время исправлено? Может вам просто повезло, что вы на них еще не наткнулись в своем устройстве. Я не настолько удачливый, на пару-тройку натыкался. Видимо я сравниваю 1.5.0 и 2.0.0 TCP-сервер у меня работает стабильно, к нему вопросов не было. А те исправления ,которые были добавлены многочисленными соавторами стека возможно, не коснулись используемой мной части. Я спрашиваю про 1.3.2, а вы отвечаете про 1.5.0 и 2.0.0. Это хорошо. Хорошая динамика. движение к высоким европейским стандартам  С Русланом Кулабуховым - автором БТГ Кулабухова не знакомы? Он ваш земляк. Там тоже не принято читать, учиться физике, только писать, писать, писать. Вы вначале тему читайте, пожалуйста и вообще сообщения читайте перед тем, как писать ответ.
Сообщение отредактировал Pridnya - Nov 9 2016, 09:55
|
|
|
|
|
Nov 9 2016, 11:59
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159

|
Цитата(Pridnya @ Nov 9 2016, 11:27)  Всем привет! ... Что проще сделать? Ручками переписать UDP-клиента под SNTP-клиента используя LwIP_v1.3.2 или заменить LwIP_v1.3.2 на более новый LwIP_v1.4.1 и использовать из него sntp.c и sntp.h, которые вроде как должны с ним работать? Проще ручками переписать. Отправляем пустой NTP-запрос на порт 123 компьютера (Windows), а NTP-сервер Windows отвечает пакетом с метками времени. Кому интересно, на скришоте обмен из Wireshark, только Wireshark ошибается в комментариям к меткам времени, NTP TimeStamp отсчитывается не с 1970, а с 1900 года. И запрос к NTP-серверу должен быть не совсем пустой. Но это первый вариант, когда клиент запрашивает время. Если клиентов в сети много, то нужно добавить прием широковещательных пакетов с метками времени.
Сообщение отредактировал Pridnya - Nov 9 2016, 12:01
Эскизы прикрепленных изображений
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|