Поделиться через


Управление системным временем и RTC в высокоуровневых приложениях

Внимание

Это документация по Azure Sphere (устаревшая версия). Служба Azure Sphere (устаревшая версия) выходит на пенсию 27 сентября 2027 г., и к этому времени пользователи должны перейти в Azure Sphere (интегрированная). Используйте селектор версий, расположенный над toC, чтобы просмотреть документацию по Azure Sphere (интегрированная).

Часы реального времени позволяют поддерживать отсчет времени на устройстве Azure Sphere, когда оно отключено от питания или не имеет доступа к сетевому подключению после перезапуска. Это позволяет устройству поддерживать отсчет времени во время отключения питания даже при отсутствии доступа к серверу NTP.

Установленное системное время не сохраняется при отключении питания устройства. Чтобы сохранять время во время отключения питания, следует вызвать функцию Applibs clock_systohc. Вызов функции clock_systohc передает системное время в часы реального времени.

Требования для работы часов реального времени

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

Файлы заголовков

Включите в проект заголовок часов реального времени:

 #include <applibs\rtc.h>

Параметры в манифесте приложения

Чтобы использовать API часов реального времени и обычных часов, следует добавить в манифест приложения параметр приложения SystemTime и присвоить ему значение true. Манифест приложения Azure Sphere содержит дополнительные сведения о манифесте приложения.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App3_RTC",
  "ComponentId" : "bb267cbd-4d2a-4937-8dd8-3603f48cb8f6",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "HardwareAddressConfig": true,
    "Gpio": [],
    "Uart": [],
    "WifiConfig": false,
    "NetworkConfig": false,
    "SystemTime": true,
    "TimeSyncConfig": true
  }
}

Получение системного времени

Чтобы получить системное время, вызовите стандартную функцию clock_gettime.

Настройка системного времени

Чтобы установить системное время, вызовите стандартную функцию clock_settime.

Синхронизация системного времени с часами реального времени

Установленное системное время не сохраняется при отключении питания устройства. Чтобы сохранить время при потере питания, вызовите функцию Applibs clock_systohc . При вызове функции clock_systohc системное время передается в часы реального времени.

Настройка службы NTP-клиента

Служба NTP-клиента по умолчанию включена. Если вы изменяете системное время при включенной службе NTP-клиента, она переопределит время UTC при подключении устройства к Интернету. Вы можете отключить службу NTP-клиента, но это может привести к сбоям установки обновлений из облака на устройство, если разница между системным временем и временем сервера NTP будет слишком большой.

Настройка часового пояса

Системное время и время на часах реального времени соответствует стандарту GMT/UTC. Часовой пояс, используемый приложением, можно изменить. Для этого вызовите функцию setenv, чтобы изменить переменную среды TZ, а затем вызовите функцию tzset.

В проекте SetTimeFromLocation показано, как использовать обратный поиск IP-адресов для получения сведений о расположении, а затем получить время для расположения и задать время устройства. Этот проект входит в коллекцию Azure Sphere, коллекцию незамеченных скриптов, служебных программ и функций.

ОС Azure Sphere поддерживает некоторые допустимые форматы переменной среды TZ, но не все.

  • Текущий часовой пояс можно задать с переходом или без перехода на летнее время. Например, EST+5, EST+5EDT. Часовые пояса, расположенные западнее Гринвичского меридиана, указываются со знаком плюс, а восточнее — со знаком минус.
  • Нельзя указать дату и время, когда DST должен вступить в силу.
  • Невозможно указать файл часового пояса или базу данных.

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

Указание сервера NTP

Клиентская служба NTP может быть настроена для получения времени из нескольких источников. Источник времени по умолчанию , prod.time.sphere.azure.netкак указано в требованиях к сети ОС Azure Sphere.

Клиент NTP пытается синхронизировать время каждые 15 секунд до успешной синхронизации. После успешной синхронизации времени он пытается повторно синхронизировать время каждые 24 часа. При синхронизации времени Azure Sphere сначала использует случайный исходный порт клиента UDP от 32678 до 61000. Если этот порт завершается ошибкой, Azure Sphere пытается использовать порт 124 в качестве исходного порта клиента UDP.

Можно указать, что система получает время от DHCP-сервера или указать источник времени в приложении с помощью Networking_TimeSync_EnableCustomNTP или Networking_TimeSync_EnableDefaultNTP.

Если настроено использование DHCP для источников сервера времени, Azure Sphere обработает параметр DHCP 042, а клиент NTP обрабатывает только первые две записи, отправленные в параметре DHCP, который должен быть указан в порядке предпочтения. Они будут считаться основным сервером и вторичным сервером.

Вы также можете настроить сервер времени через Networking_TimeSync_EnableCustomNTP , если вы хотите указать сервер основного и дополнительного времени через приложение. Максимальная длина каждого полного доменного имени сервера — 255 символов.

Резерв

  • Если клиент NTP настроен для получения серверов времени с помощью DHCP или API, для указания резервного поведения требуется дополнительный параметр.

  • Сначала клиент попытается связаться с сервером основного времени. Если клиенту не удается получить допустимый ответ сервера времени, он попытается использовать сервер дополнительного времени (если указано).

  • Если сервер вторичного времени указан, и он завершается ошибкой или если параметр вернуться к ОС по умолчанию через Networking_NtpOption_FallbackServerEnabled сбой, система будет обращаться к источнику времени ос по умолчанию prod.time.sphere.azure.net.

    • На следующем 24-часовом интервале синхронизации ОС вернется и попытается запросить основной сервер времени.
  • Если вы указали Networking_NtpOption_FallbackServerDisabled, ОС будет продолжать запрашивать первичный и вторичный сервер каждые 15 секунд, пока он не будет успешно синхронизирован с одним из серверов времени.

Многодомные устройства

Параметры сервера времени — это глобальный параметр, а не для каждого параметра интерфейса. Если устройство Azure Sphere является многодомным, и оба интерфейса получают сведения о сервере NTP через DHCP, последний обработанный набор параметров DHCP NTP выигрывает.

Пример использования системного времени

Пример использования системного времени демонстрирует управление системным временем и аппаратными часами реального времени. Пример приложения задает системное время, а затем использует clock_systohc функцию для синхронизации системного времени с RTC.

В проекте SetTimeFromLocation показано, как использовать обратный поиск IP-адресов для получения сведений о расположении, а затем получить время для расположения и задать время устройства. Этот проект входит в коллекцию Azure Sphere, коллекцию незамеченных скриптов, служебных программ и функций.

Пользовательский пример NTP

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