реклама на сайте
подробности

 
 
> STM32F407+LwIP_v.1.3.2+sntp.c из LwIP_v1.4.1 (Raw API)
Pridnya
сообщение Nov 9 2016, 08:27
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Nov 9 2016, 08:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Если боитесь трогать lwip "потому что не собирается", то проще, конечно, заново изобрести клиента SNTP. Вообще, трудно себе представить что-либо проще, чем SNTP. Разве что простой пинг проще, наверное.
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 9 2016, 08:52
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 9 2016, 09:13
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Pridnya @ Nov 9 2016, 11:52) *
Может, какой программный эмулятор есть?

Конечно есть. И не эмулятор, а нормальный NTP сервер. Берём линуксовый компьютер, устанавливаем ntpd, настраиваем - и вперёд.
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 9 2016, 09:31
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 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.
Все понял с вами (судя по количеству созданных вами тем и тематике на этом форуме).Я такк бы мог спросить и у замначальника по разным вопросам, от клининга до адаптивных цифровых фильтров (должность одного лица).biggrin.gif

Сообщение отредактировал Pridnya - Nov 9 2016, 09:56
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 12:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016