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.

[参考译文] MSP432E401Y:正在运行/正在运行的 RTOS 系统中的 SNTP 时间同步?

Guru**** 2562120 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/889182/msp432e401y-sntp-time-synchronization-in-a-running-active-rtos-system

器件型号:MSP432E401Y

您好!

我的当前设置:

- FreeRTOSv10.2.1 (主要使用) POSIX 接口/ TI 编译器/连接器(CCS 9.2.x)

- simplelink_msp432e4_sdk_3_20_00_10

在我当前的应用程序中、当我通过 SNTP 获取时间并希望更新系统时间时、我确实面临一些任务(主要是基于网络)的崩溃或竞争情况。 这是如何实现的?

如果我在主应用程序线程运行之前更新了时间、我就不会遇到问题。 但是、我需要能够在始终运行的同时、不时地同步本地时间(比如每天)

线程。

问:保护函数调用需要什么:clock_settime (..) ??

  if (clock_settime (clock_realtime、&TSPEC)!= 0){        

while (1);//调试死区

时间得到更新没有问题。 但是、其他线程在更新系统时间时停止运行。

问:我是否需要保护代码区域才能进行此更新、而不会中断其他使用时间函数的线程?

BR

Markus

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

    您好!

    我们没有关于 SNTP 的示例。 但是、通常情况下、如果您面临某些任务的竞争条件、则需要使用信标来应用资源并保护您的任务。

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

    尊敬的冬季:

    感谢你的答复。 我能够"跟踪"我所遇到问题的根本原因。 其内容如下:

    -一旦您从网络应用新时间,通过 SNTP 的系统时间同步就可以注入有关系统时间的“时间步长”。 这可能是一个经常使用系统时间计算某些延迟的问题。 这就是我在我的系统中拥有的东西。 因此、我将尝试通过 NO(!)计算所需的延迟时间。 使用 POSIX call clock_gettime()……我还没有解决方案,但至少我现在已经了解了正在发生的情况。 在这种上下文中使用信标不会有什么帮助、因为系统时间函数中的潜在步骤可能仍会发生。 我需要使用一种与目前实际时间调整完全无关的单调时间。 我将在找到解决方案后回来。

    BR

    Markus

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

    尊敬的冬季:

    好消息! 我能够解决这个问题。 我说不使用 POSIX 调用 clock_gettime()的速度有点快。 但是、我正在使用该呼叫

    具有以下选项:

    (空) clock_gettime (clock_monotonic、&CurrentTime);/* clock_monotonic!!! *

    这确实防止了由于 SNTP 同步过程中涉及到与 Unix Epoch 时间相关的绝对时间而导致延迟函数中出现潜在的"时间步长"。 问题解决了;-)

    BR

    Markus

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

    很高兴听到进展。  

    感谢您在论坛中分享 SNTP 经验。