This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220SF-LAUNCHXL:CC3220SF:SNTP 服务器

Guru**** 2595800 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/725932/cc3220sf-launchxl-cc3220sf-sntp-server

器件型号:CC3220SF-LAUNCHXL

你(们)好

  如何获得正确的印度时间我配置了印度 NTP 服务器、但每次我获得 UTC 时间而不是印度时间。

   SNTP_getTime()和 SNTP_getTimeByAddr ()该 API 仅提及获取 UTC 时间。 否则、我们需要使用代码将 UTC 转换为 IST、差值为5小时30分钟。  

  如果时间不合适、则意味着我们可以使用外部 RTC (时间对于我们的项目很重要)。

谢谢你  

  瓦苏

   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    SNTP 协议不识别时区或夏令时、您需要自行管理。 NTP 仅使用 UTC 时间。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好、Jan

    管理意味着我们需要手动计算时间差?

    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    是、如果使用 NTP 协议。 您的设备无法知道自己的位置。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好、Jan

     在哪里需要更改(5:30)时间差?

    *
    * NTP Epoch (1900 GMT 1月1日起的秒)与 UNIX
    * Epoch (1970 GMT 1月1日起的秒)
    之间的差异*/
    #define TIME_BASEDIFF (((((((uint32_t) 70 * 365 + 17)* 24 * 3600)
    
    )#define TIME_NTP_TO_UNIX (t)((t)- TIME_BASEDIFF)
    
    #define NTP_SERVERS 1
    #define NTP_SERVER_PORT 123
    
    /*等待服务器回复的时间(秒)*/
    #define NTP_Reply_WAIT_TIME 5
    
    /*必须等待至少15秒才能重试 NTP 服务器(RFC 4330)*/
    #define NTP_POLL_TIME 15
    
    /*
    === setNwpTime ====
    *在网络处理器上设置时间
    *
    ts:从 Epoch 到*/
    
    
    static void setNwpTime (time_t ts)
    {的时间(以秒为单位)
    slDateTime_t dt;
    struct tm;
    
    /*将从 Epoch 开始的时间转换为本地时间*/
    TM =*本地时间(&ts);
    
    /*在网络处理器上设置系统时钟以验证证书*/
    dt.tm_day = tm.tm_mday;
    /* TM.TM_mon 是自1月起的月份、因此添加1以获得实际月份*/
    DT.TM_mon = TM.TM_mon + 1;
    /* TM.TM_year 是1900年以来的一年、因此添加1900即可获得实际年份*
    DT.TM_year = TM.TM_year + 1900;
    DT.TM_Hour = TM.TM_Hour;
    DT.TM_MIN = TM.TM_MIN;
    DT.TM_sec = TM.TM_sec;
    SL_DeviceSet (SL_DEVICE_General、SL_DEVICE_General_DATE_TIME、
    sizeof (slDateTim_t)、(unsigned char *)(&dt));
    }
    
    /*
    ===== startSNTP ======
    */
    void startSNTP (void)
    {
    uint64_t ntpTimeStamp;
    uint32_t currentTimeNtp = 0;
    uint32_t currentTimeUnix = 0;
    int32_t retval;
    time_t ts;
    slNetSock_Timeval_t timeval;
    struct timespec TSPEC;
    
    /*为 NTP 服务器回复设置超时值*/
    timeval.tV_sec = ntp_reply_wait_time;
    timeval.tv_usec = 0;
    
    执行{
    /*使用内置 NTP 服务器列表获取时间:*/
    RetVal = SNTP getTime (NULL、0、&timeval、&ntpTimeStamp);
    如果(retval!= 0){
    UART_PRINT (
    "startSNTP:无法获取时间(%ld)、将在%d 秒内重试...\n"、
    RetVal、NTP_POLL_TIME);
    睡眠(NTP_POLL_TIME);
    UART_PRINT ("startSNTP:重试...\n");
    }
    
    /*保存当前(基于 NTP 时间)时间*/
    currentTimeNtp = ntpTimeStamp >> 32;
    
    } while (retval < 0);
    
    /*
    *在应用处理器上设置时间。 始终传递时间值
    *基于 UNIX Epoch
    *
    currentTimeUnix = time_ntp_TO_UNIX (currentTimeNtp);
    TSPEC.tv_nsec = 0;
    TSPEC.tv_sec = currentTimeUnix;
    if (clock_settime (clock_realtime、&TSPEC)!= 0){
    UART_PRINT ("startSNTP:无法设置当前时间\n");
    while (1);
    }
    
    /*
    *使用 time.h API 设置 NWP 上的时间并在控制台上显示。
    *必须使用适当的(取决于工具链) Epoch 调用 time.h API
    *时基
    //
    #if defined (__TI_Compiler_version__)
    //对于 TI 工具链,时间 API 根据 NTP Epoch 预计时间*/
    TS = currentTimeNtp;
    #else
    /*用于 GCC 和 IAR 的时间 API 基于 UNIX Epoch 的预期时间*/
    TS = currentTimeUnix;
    #endif
    
    /*设置网络处理器上的时间*/
    setNwpTime (ts);
    
    /*以日历格式打印时间:*/
    UART_PRINT ("当前时间:%s\n\r\n、ctim(&ts));
    }
    

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    只需将偏移量(以秒为单位)添加到 Unix 时间(currentTimeUnix)即可。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好、Jan

    #define TIME_BASEDIFF (((((uint32_t) 70 * 365 + 17)* 24 * 3600))

    您能解释一下我忘记了这个宏吗?
    我需要在何处添加偏移量?

    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    此宏用于 NTP 时间和 Unix 时间之间的偏移。
    - NTP 时间:1900年1月1日的秒数(NTP epoch)
    - Unix 时间:1970年1月1日(Unix 时代)的秒数

    currentTimeUnix = currentTimeUnix +(5*3600)+30*60;

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好、Jan

    很抱歉耽误您的回答、

    现在、我开始了合适的印度时间。

    感谢 Jan 帮助解决了这个问题。