ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
928764 Топик полностью
Dingo (21.06.2019 16:42 - 16:52, просмотров: 112) ответил framer на Так у Вас есть клиент нтп? Откуда берете ошибку относительно источника? Там ведь не просто так взять время сервера. Надо считать время которое на транспорт, брать во внимание jitter. Вот например параметры которые показывает клиент нтп:
Ох, и дотошная здесь публика! Да только благодаря этому мне здесь и интересно. Более подробные условия теста: STM32F407, без ОСи, как и у казал в стартовом посте. Полноценного NTP клиента нет. Как измеряю round trip и собственно время?
  • Выделяем буфер, заполняем пакет запроса минимально необходимыми данными
  • Запоминаем значение таймера, командуем udp_send();
  • После ETH_CheckFrameReceived() но перед LwIP_Pkt_Handle(); каждый раз запоминаем значение таймера.
  • Если прилетел наш пакет(поле origin совпадать должно с записанным при отправке в transmit), считаем время доставки
  • Дальше небольшой фильтр: если время доставки не превышает, чем {минимальное из зафиксированных ранее} + 250мксек, то работаем, если нет - отбрасываем. Отбрасывается примерно до 10..15% пакетов. Время соответствует ± времени ping-а с компа. Расчётное время сервера = время в поле transmit + время_в_пути/2. Локальное время, соответствующее этому - время приёма пакета, то самое, которое после ETH_CheckFrameReceived() запомнили. Ошибка - расхождение локального с расчётным временем на сервере, соответствующее приёму пакета. Фильтрации по точности, выбора сервера и прочих радостей linux-a и ntpd нет. UPD: jitter почти все сервера прописывают у себя как ==0. :'(