높은 수준의 애플리케이션에서 시스템 시간 및 RTC 관리

RTC(실시간 클록)는 디바이스 전원이 끊어지고 디바이스가 다시 부팅된 후 네트워크 연결에 액세스할 수 없는 경우 Azure Sphere 디바이스에서 시간을 유지하는 데 사용됩니다. 이렇게 하면 디바이스가 NTP 서버에 액세스할 수 없는 경우에도 전원이 손실되는 동안 시간을 유지할 수 있습니다.

시스템 시간을 설정하면 디바이스 전원이 손실될 때 유지되지 않습니다. 전원 손실 중에 시간을 유지하려면 Applibs 함수 clock_systohc 호출해야 합니다. clock_systohc 호출되면 시스템 시간이 RTC로 푸시됩니다.

RTC 요구 사항

RTC를 사용하는 애플리케이션은 적절한 헤더 파일을 포함하고 애플리케이션 매니페스트에 RTC 설정을 추가해야 합니다.

헤더 파일

프로젝트에 rtc 헤더를 포함합니다.

 #include <applibs\rtc.h>

애플리케이션 매니페스트 설정

RTC 및 표준 클록 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 함수를 호출합니다.

RTC와 시스템 시간 동기화

시스템 시간이 설정되면 디바이스 전원이 손실될 때 유지되지 않습니다. 전원 손실 중에 시간을 유지하려면 Applibs clock_systohc 함수를 호출합니다. clock_systohc 호출되면 시스템 시간이 RTC로 푸시됩니다.

NTP 클라이언트 서비스 구성

NTP 클라이언트 서비스는 기본적으로 사용하도록 설정됩니다. NTP 클라이언트 서비스를 사용하는 동안 시스템 시간을 설정하면 디바이스가 인터넷에 연결되어 있는 UTC 시간을 덮어씁 수 있습니다. NTP 클라이언트 서비스를 사용하지 않도록 설정할 수 있습니다. 그러나 시스템 시간과 NTP 서버 시간의 차이가 너무 크면 디바이스의 클라우드 업데이트가 실패할 수 있습니다.

표준 시간대 설정

시스템 시간과 RTC 시간은 GMT/UTC에 저장됩니다. 함수를 호출하여 TZ 환경 변수를 업데이트한 다음 함수를 setenv 호출하여 애플리케이션에서 사용하는 표준 시간대를 tzset 변경할 수 있습니다.

SetTimeFromLocation 프로젝트는 역방향 IP 조회를 사용하여 위치 정보를 가져온 다음 위치 시간을 가져오고 디바이스 시간을 설정하는 방법을 보여 줍니다. 이 프로젝트는 매핑되지 않은 스크립트, 유틸리티 및 함수 컬렉션인 Azure Sphere 갤러리의 일부입니다.

Azure Sphere OS는 TZ 환경 변수에 대해 가능한 일부 형식을 지원하지만 전부는 아닙니다.

  • DST(일광 절약 시간제)를 사용하거나 사용하지 않고 현재 표준 시간대를 설정할 수 있습니다. 예: "EST+5", "EST+5EDT". 현지 표준 시간대가 프라임 자오선의 서쪽이고 동쪽인 경우 음수인 경우 이 값은 양수입니다.
  • DST가 적용되는 날짜와 시간을 지정할 수 없습니다.
  • 표준 시간대 파일/데이터베이스를 지정할 수 없습니다.

전원이 손실되는 동안 표준 시간대 설정을 유지 관리하려면 변경 가능한 스토리지 를 사용하여 표준 시간대를 영구 스토리지에 저장한 다음 디바이스가 다시 부팅되면 설정을 회수할 수 있습니다.

NTP 서버 지정

여러 원본에서 시간을 가져오도록 NTP 클라이언트 서비스를 구성할 수 있습니다. 기본 시간 원본은 prod.time.sphere.azure.netAzure Sphere OS 네트워킹 요구 사항에 설명된 대로 입니다.

NTP 클라이언트는 성공적인 동기화가 발생할 때까지 15초마다 시간을 동기화하려고 시도합니다. 시간을 성공적으로 동기화한 후 24시간마다 한 번씩 시간을 다시 동기화하려고 시도합니다. Azure Sphere가 시간 동기화를 수행하는 경우 먼저 32678-61000 사이의 임의의 UDP 클라이언트 원본 포트를 사용합니다. 이 포트가 실패하면 Azure Sphere는 포트 124를 UDP 클라이언트 원본 포트로 사용하려고 시도합니다.

시스템이 DHCP 서버에서 시간을 가져오거나 Networking_TimeSync_EnableCustomNTP 또는 Networking_TimeSync_EnableDefaultNtp 함수를 통해 애플리케이션의 시간 원본을 지정할 수 있습니다.

시간 서버 원본에 DHCP를 사용하도록 구성된 경우 Azure Sphere는 DHCP 옵션 042를 처리하고 NTP 클라이언트는 DHCP 옵션에서 보낸 처음 두 항목만 처리합니다. 이 항목은 기본 설정 순서대로 나열되어야 합니다. 이러한 서버는 주 서버 및 보조 서버로 간주됩니다.

애플리케이션을 통해 주 및 보조 시간 서버를 지정하려는 경우 Networking_TimeSync_EnableCustomNTP 통해 시간 서버를 구성할 수도 있습니다. 각 시간 서버 FQDN(정규화된 도메인 이름)의 최대 길이는 255자입니다.

대체

  • NTP 클라이언트가 DHCP 또는 API를 통해 시간 서버를 가져오도록 구성된 경우 대체 동작을 지정하려면 추가 매개 변수가 필요합니다.

  • 클라이언트는 먼저 주 시간 서버에 연결하려고 시도합니다. 클라이언트가 유효한 시간 서버 응답을 가져오지 못하면 보조 시간 서버(지정된 경우)를 시도합니다.

  • 보조 시간 서버를 지정하고 실패하거나 를 통해 Networking_NtpOption_FallbackServerEnabled OS 기본값으로 대체 옵션이 실패하는 경우 시스템은 기본 OS 시간 원본 prod.time.sphere.azure.net 연결합니다.

    • 다음 24시간 동기화 간격에서 OS는 돌아가서 주 시간 서버를 쿼리하려고 시도합니다.
  • Networking_NtpOption_FallbackServerDisabled 지정한 경우 OS는 시간 서버 중 하나와 성공적으로 동기화될 때까지 15초마다 주 및 보조 서버를 계속 쿼리합니다.

다중 호스트 디바이스

시간 서버 설정은 인터페이스별 설정이 아닌 전역 설정입니다. Azure Sphere 디바이스가 다중 호스트되고 두 인터페이스가 DHCP를 통해 NTP 서버 정보를 가져오는 경우 가장 최근에 처리된 DHCP NTP 옵션 집합이 우선합니다.

시스템 시간 샘플

시스템 시간 샘플은 시스템 시간을 관리하고 하드웨어 RTC를 사용하는 방법을 보여줍니다. 샘플 애플리케이션은 시스템 시간을 설정한 다음 함수를 clock_systohc 사용하여 시스템 시간을 RTC와 동기화합니다.

SetTimeFromLocation 프로젝트는 역방향 IP 조회를 사용하여 위치 정보를 가져온 다음 위치 시간을 가져오고 디바이스 시간을 설정하는 방법을 보여 줍니다. 이 프로젝트는 매핑되지 않은 스크립트, 유틸리티 및 함수 컬렉션인 Azure Sphere 갤러리의 일부입니다.

사용자 지정 NTP 샘플

사용자 지정 NTP 샘플은 여러 원본에서 시간을 가져오도록 NTP 클라이언트 서비스를 구성하는 방법을 보여 줍니다.