【问题标题】:gettimeofday and time() jumps on BeagleBone - timesyncd?gettimeofday 和 time() 在 BeagleBone 上跳转 - timesyncd?
【发布时间】:2017-11-15 19:19:27
【问题描述】:

我的任务需要在一秒范围内以相当精确的间隔运行。

我使用 gettimeofday() 来建立 start_usec。任务执行完成后,它调用 timedSleep() 函数。 timedSleep() 调用 gettimeofday() 以微秒为单位计算睡眠时间,递增调用函数的 start_usec 变量,然后调用 usleep()。

它工作得很好,除了大约每分钟一次它会“跳过” - timedSleep 函数在一秒后返回(据我所知),但 gettimeofday 返回一个提前三到四秒的值。

这是一个代码 sn-p 后跟一些输出。最后一行,时间提前了大约四秒,但实际经过的时间只有一秒。

BeagleBone 正在运行使用 timesyncd 的 Debian 发行版。这会导致这种行为吗?

struct timeval now;
gettimeofday(&now,NULL);
printf("Start: %02d %06d Now: %02d %06d... ",(int)((start_usec / 1000000) %100), (int)(start_usec % 1000000),  now.tv_sec %100, + now.tv_usec);

// Sleep for desired interval
shm.timedSleep(rule_id, &start_usec);

gettimeofday(&now,NULL);
printf("%02d %06d ",now.tv_sec %100, + now.tv_usec);
time(&curtime);
loctime = localtime(&curtime);
strftime(msgbuff, sizeof(msgbuff), "%Y-%m-%dT%H:%M:%S",loctime);
printf("%s\n",msgbuff);


Start: 78 117538 Now: 04 355933... 05 354979 2017-11-15T13:58:25
Start: 79 117538 Now: 05 355818... 06 354980 2017-11-15T13:58:26
Start: 80 117538 Now: 06 355816... 07 354981 2017-11-15T13:58:27
Start: 81 117538 Now: 07 355819... 08 354981 2017-11-15T13:58:28
Start: 82 117538 Now: 08 355819... 09 354979 2017-11-15T13:58:29
Start: 83 117538 Now: 09 355232... 10 354838 2017-11-15T13:58:30
Start: 84 117538 Now: 10 355776... 14 041276 2017-11-15T13:58:34

这个 BeagleBone 有一个外部 RTC,看起来不错:

root@vesta:/usr/local/vesta/bbb/src# timedatectl
      Local time: Wed 2017-11-15 14:24:06 EST
  Universal time: Wed 2017-11-15 19:24:06 UTC
        RTC time: Wed 2017-11-15 19:24:06
       Time zone: America/New_York (EST, -0500)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no

【问题讨论】:

    标签: gettimeofday


    【解决方案1】:

    好的 - 这是时间同步的。 BeagleBone 系统时钟非常缓慢,timesyncd 每分钟左右颠簸几秒钟。停止 timesyncd 可以解决问题。现在正在研究 ntp 作为替代方案。

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 2013-08-25
      • 2013-10-31
      • 2023-03-11
      • 2013-02-17
      • 1970-01-01
      • 2014-07-27
      • 2016-06-23
      • 2015-08-29
      相关资源
      最近更新 更多