This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

gettimeofday returns incorrect timestamp after ~7 days

I am working on UTC time synchronization using SNTP. The timestamp is correctly obtained and set using clock_settime(). I wanted to determine at when to resync with the NTP server. I wrote the code below that is called every time an message is send containing the timestamp. I setup a timer to attempt the send this message every hour. After ~6 days and 12 hours (see lines 157-158 in the log), the timestamp returned by gettimeofday jumps back in time (returns to the initial synced time), while the uptime hasn't overflown. This has happened on multiple systems and multiple occasions. I'm using the NRF Connect SDK 1.7.0.

Any idea as to why the timestamp jumps even though the uptime seems fine?

void printTimeStamp (void)
{
    struct timeval tv;
    gettimeofday (&tv, NULL);
    time_t systemTimestamp = (time_t) (tv.tv_sec);
    struct tm *tm_systemTime = gmtime (&systemTimestamp);
    LOG_ERR ("Current Time: %02u-%02u-%02u %02u:%02u:%02u, uptime=%10u, timestamp=%llu",
              tm_systemTime->tm_mday, tm_systemTime->tm_mon + 1, tm_systemTime->tm_year % 100,
              tm_systemTime->tm_hour, tm_systemTime->tm_min, tm_systemTime->tm_sec,
              k_uptime_get_32 (), tv.tv_sec);
}

[00:00:42.596,588] <err> time: Current Time: 10-01-22 14:25:18, uptime=     42596, timestamp=1641824718
[01:00:42.596,588] <err> time: Current Time: 10-01-22 15:25:18, uptime=   3642596, timestamp=1641828318
[02:00:42.596,618] <err> time: Current Time: 10-01-22 16:25:18, uptime=   7242596, timestamp=1641831918
[03:00:42.596,649] <err> time: Current Time: 10-01-22 17:25:18, uptime=  10842596, timestamp=1641835518
[04:00:42.597,015] <err> time: Current Time: 10-01-22 18:25:18, uptime=  14442596, timestamp=1641839118
[05:00:42.596,679] <err> time: Current Time: 10-01-22 19:25:18, uptime=  18042596, timestamp=1641842718
[06:00:42.596,679] <err> time: Current Time: 10-01-22 20:25:18, uptime=  21642596, timestamp=1641846318
[07:00:42.596,710] <err> time: Current Time: 10-01-22 21:25:18, uptime=  25242596, timestamp=1641849918
[08:00:42.596,740] <err> time: Current Time: 10-01-22 22:25:18, uptime=  28842596, timestamp=1641853518
[09:00:42.596,771] <err> time: Current Time: 10-01-22 23:25:18, uptime=  32442596, timestamp=1641857118
[10:00:42.597,106] <err> time: Current Time: 11-01-22 00:25:18, uptime=  36042597, timestamp=1641860718
[11:00:42.596,801] <err> time: Current Time: 11-01-22 01:25:18, uptime=  39642596, timestamp=1641864318
[12:00:42.607,849] <err> time: Current Time: 11-01-22 02:25:18, uptime=  43242607, timestamp=1641867918
[13:00:42.596,832] <err> time: Current Time: 11-01-22 03:25:18, uptime=  46842596, timestamp=1641871518
[14:00:42.596,862] <err> time: Current Time: 11-01-22 04:25:18, uptime=  50442596, timestamp=1641875118
[15:00:42.596,893] <err> time: Current Time: 11-01-22 05:25:18, uptime=  54042596, timestamp=1641878718
[16:00:42.596,923] <err> time: Current Time: 11-01-22 06:25:18, uptime=  57642596, timestamp=1641882318
[17:00:42.596,954] <err> time: Current Time: 11-01-22 07:25:18, uptime=  61242596, timestamp=1641885918
[18:00:42.596,984] <err> time: Current Time: 11-01-22 08:25:18, uptime=  64842596, timestamp=1641889518
[19:00:42.597,015] <err> time: Current Time: 11-01-22 09:25:18, uptime=  68442596, timestamp=1641893118
[20:00:42.597,045] <err> time: Current Time: 11-01-22 10:25:18, uptime=  72042597, timestamp=1641896718
[21:00:42.597,076] <err> time: Current Time: 11-01-22 11:25:18, uptime=  75642597, timestamp=1641900318
[22:00:42.597,106] <err> time: Current Time: 11-01-22 12:25:18, uptime=  79242597, timestamp=1641903918
[23:00:42.597,137] <err> time: Current Time: 11-01-22 13:25:18, uptime=  82842597, timestamp=1641907518
[24:00:42.597,167] <err> time: Current Time: 11-01-22 14:25:18, uptime=  86442597, timestamp=1641911118
[25:00:42.597,198] <err> time: Current Time: 11-01-22 15:25:18, uptime=  90042597, timestamp=1641914718
[26:00:42.597,229] <err> time: Current Time: 11-01-22 16:25:18, uptime=  93642597, timestamp=1641918318
[27:00:42.597,259] <err> time: Current Time: 11-01-22 17:25:18, uptime=  97242597, timestamp=1641921918
[28:00:42.597,290] <err> time: Current Time: 11-01-22 18:25:18, uptime= 100842597, timestamp=1641925518
[29:00:42.597,320] <err> time: Current Time: 11-01-22 19:25:18, uptime= 104442597, timestamp=1641929118
[30:00:42.597,351] <err> time: Current Time: 11-01-22 20:25:18, uptime= 108042597, timestamp=1641932718
[31:00:42.597,381] <err> time: Current Time: 11-01-22 21:25:18, uptime= 111642597, timestamp=1641936318
[32:00:42.597,961] <err> time: Current Time: 11-01-22 22:25:18, uptime= 115242597, timestamp=1641939918
[33:00:42.597,961] <err> time: Current Time: 11-01-22 23:25:18, uptime= 118842597, timestamp=1641943518
[34:00:42.597,991] <err> time: Current Time: 12-01-22 00:25:18, uptime= 122442597, timestamp=1641947118
[35:00:42.598,419] <err> time: Current Time: 12-01-22 01:25:18, uptime= 126042598, timestamp=1641950718
[36:00:42.598,052] <err> time: Current Time: 12-01-22 02:25:18, uptime= 129642598, timestamp=1641954318
[00:36:10.598,083] <err> time: Current Time: 12-01-22 03:25:18, uptime= 133242598, timestamp=1641957918
[01:36:10.598,114] <err> time: Current Time: 12-01-22 04:25:18, uptime= 136842598, timestamp=1641961518
[02:36:10.598,144] <err> time: Current Time: 12-01-22 05:25:18, uptime= 140442598, timestamp=1641965118
[03:36:10.598,175] <err> time: Current Time: 12-01-22 06:25:18, uptime= 144042598, timestamp=1641968718
[04:36:10.598,205] <err> time: Current Time: 12-01-22 07:25:18, uptime= 147642598, timestamp=1641972318
[05:36:10.598,236] <err> time: Current Time: 12-01-22 08:25:18, uptime= 151242598, timestamp=1641975918
[06:36:10.598,266] <err> time: Current Time: 12-01-22 09:25:18, uptime= 154842598, timestamp=1641979518
[07:36:10.598,297] <err> time: Current Time: 12-01-22 10:25:18, uptime= 158442598, timestamp=1641983118
[08:36:10.598,327] <err> time: Current Time: 12-01-22 11:25:18, uptime= 162042598, timestamp=1641986718
[09:36:10.598,358] <err> time: Current Time: 12-01-22 12:25:18, uptime= 165642598, timestamp=1641990318
[10:36:10.598,754] <err> time: Current Time: 12-01-22 13:25:18, uptime= 169242598, timestamp=1641993918
[11:52:10.847,015] <err> time: Current Time: 12-01-22 14:41:18, uptime= 173802846, timestamp=1641998478
[12:52:10.847,137] <err> time: Current Time: 12-01-22 15:41:18, uptime= 177402847, timestamp=1642002078
[13:52:10.847,442] <err> time: Current Time: 12-01-22 16:41:18, uptime= 181002847, timestamp=1642005678
[14:52:10.847,076] <err> time: Current Time: 12-01-22 17:41:18, uptime= 184602847, timestamp=1642009278
[15:52:10.847,106] <err> time: Current Time: 12-01-22 18:41:18, uptime= 188202847, timestamp=1642012878
[16:52:10.847,137] <err> time: Current Time: 12-01-22 19:41:18, uptime= 191802847, timestamp=1642016478
[17:52:10.847,167] <err> time: Current Time: 12-01-22 20:41:18, uptime= 195402847, timestamp=1642020078
[18:52:10.847,198] <err> time: Current Time: 12-01-22 21:41:18, uptime= 199002847, timestamp=1642023678
[19:52:10.847,290] <err> time: Current Time: 12-01-22 22:41:18, uptime= 202602847, timestamp=1642027278
[20:52:10.847,229] <err> time: Current Time: 12-01-22 23:41:18, uptime= 206202847, timestamp=1642030878
[21:52:10.850,708] <err> time: Current Time: 13-01-22 00:41:18, uptime= 209802850, timestamp=1642034478
[22:52:10.848,327] <err> time: Current Time: 13-01-22 01:41:18, uptime= 213402848, timestamp=1642038078
[23:52:10.848,358] <err> time: Current Time: 13-01-22 02:41:18, uptime= 217002848, timestamp=1642041678
[24:52:10.848,388] <err> time: Current Time: 13-01-22 03:41:18, uptime= 220602848, timestamp=1642045278
[25:52:10.848,419] <err> time: Current Time: 13-01-22 04:41:18, uptime= 224202848, timestamp=1642048878
[26:52:10.848,449] <err> time: Current Time: 13-01-22 05:41:18, uptime= 227802848, timestamp=1642052478
[27:52:10.848,480] <err> time: Current Time: 13-01-22 06:41:18, uptime= 231402848, timestamp=1642056078
[28:52:10.848,510] <err> time: Current Time: 13-01-22 07:41:18, uptime= 235002848, timestamp=1642059678
[29:52:10.848,632] <err> time: Current Time: 13-01-22 08:41:18, uptime= 238602848, timestamp=1642063278
[30:52:10.848,510] <err> time: Current Time: 13-01-22 09:41:18, uptime= 242202848, timestamp=1642066878
[31:52:10.849,853] <err> time: Current Time: 13-01-22 10:41:18, uptime= 245802849, timestamp=1642070478
[32:52:10.848,571] <err> time: Current Time: 13-01-22 11:41:18, uptime= 249402848, timestamp=1642074078
[33:52:10.848,602] <err> time: Current Time: 13-01-22 12:41:18, uptime= 253002848, timestamp=1642077678
[34:52:10.848,632] <err> time: Current Time: 13-01-22 13:41:18, uptime= 256602848, timestamp=1642081278
[35:52:10.848,663] <err> time: Current Time: 13-01-22 14:41:18, uptime= 260202848, timestamp=1642084878
[00:27:38.848,693] <err> time: Current Time: 13-01-22 15:41:18, uptime= 263802848, timestamp=1642088478
[01:27:38.848,724] <err> time: Current Time: 13-01-22 16:41:18, uptime= 267402848, timestamp=1642092078
[02:27:38.848,785] <err> time: Current Time: 13-01-22 17:41:18, uptime= 271002848, timestamp=1642095678
[03:27:38.848,754] <err> time: Current Time: 13-01-22 18:41:18, uptime= 274602848, timestamp=1642099278
[04:27:38.849,121] <err> time: Current Time: 13-01-22 19:41:18, uptime= 278202849, timestamp=1642102878
[05:27:38.849,121] <err> time: Current Time: 13-01-22 20:41:18, uptime= 281802849, timestamp=1642106478
[06:27:38.848,815] <err> time: Current Time: 13-01-22 21:41:18, uptime= 285402848, timestamp=1642110078
[07:27:38.848,846] <err> time: Current Time: 13-01-22 22:41:18, uptime= 289002848, timestamp=1642113678
[08:27:38.848,907] <err> time: Current Time: 13-01-22 23:41:18, uptime= 292602848, timestamp=1642117278
[09:27:38.848,907] <err> time: Current Time: 14-01-22 00:41:18, uptime= 296202848, timestamp=1642120878
[10:27:38.853,851] <err> time: Current Time: 14-01-22 01:41:18, uptime= 299802853, timestamp=1642124478
[11:27:38.850,158] <err> time: Current Time: 14-01-22 02:41:18, uptime= 303402850, timestamp=1642128078
[12:27:38.850,189] <err> time: Current Time: 14-01-22 03:41:18, uptime= 307002850, timestamp=1642131678
[13:27:38.850,219] <err> time: Current Time: 14-01-22 04:41:18, uptime= 310602850, timestamp=1642135278
[14:27:38.850,280] <err> time: Current Time: 14-01-22 05:41:18, uptime= 314202850, timestamp=1642138878
[15:27:38.850,677] <err> time: Current Time: 14-01-22 06:41:18, uptime= 317802850, timestamp=1642142478
[16:27:38.850,311] <err> time: Current Time: 14-01-22 07:41:18, uptime= 321402850, timestamp=1642146078
[17:27:38.850,341] <err> time: Current Time: 14-01-22 08:41:18, uptime= 325002850, timestamp=1642149678
[18:27:38.850,341] <err> time: Current Time: 14-01-22 09:41:18, uptime= 328602850, timestamp=1642153278
[19:27:38.850,372] <err> time: Current Time: 14-01-22 10:41:18, uptime= 332202850, timestamp=1642156878
[20:27:38.850,402] <err> time: Current Time: 14-01-22 11:41:18, uptime= 335802850, timestamp=1642160478
[21:27:38.850,463] <err> time: Current Time: 14-01-22 12:41:18, uptime= 339402850, timestamp=1642164078
[22:27:38.850,433] <err> time: Current Time: 14-01-22 13:41:18, uptime= 343002850, timestamp=1642167678
[23:27:38.850,463] <err> time: Current Time: 14-01-22 14:41:18, uptime= 346602850, timestamp=1642171278
[24:27:38.850,494] <err> time: Current Time: 14-01-22 15:41:18, uptime= 350202850, timestamp=1642174878
[25:27:38.850,585] <err> time: Current Time: 14-01-22 16:41:18, uptime= 353802850, timestamp=1642178478
[26:27:38.850,555] <err> time: Current Time: 14-01-22 17:41:18, uptime= 357402850, timestamp=1642182078
[27:27:38.850,646] <err> time: Current Time: 14-01-22 18:41:18, uptime= 361002850, timestamp=1642185678
[28:27:38.850,616] <err> time: Current Time: 14-01-22 19:41:18, uptime= 364602850, timestamp=1642189278
[29:27:38.850,646] <err> time: Current Time: 14-01-22 20:41:18, uptime= 368202850, timestamp=1642192878
[30:27:38.850,677] <err> time: Current Time: 14-01-22 21:41:18, uptime= 371802850, timestamp=1642196478
[31:27:38.850,708] <err> time: Current Time: 14-01-22 22:41:18, uptime= 375402850, timestamp=1642200078
[32:27:38.850,738] <err> time: Current Time: 14-01-22 23:41:18, uptime= 379002850, timestamp=1642203678
[33:27:38.850,799] <err> time: Current Time: 15-01-22 00:41:18, uptime= 382602850, timestamp=1642207278
[34:27:38.850,799] <err> time: Current Time: 15-01-22 01:41:18, uptime= 386202850, timestamp=1642210878
[35:27:38.850,830] <err> time: Current Time: 15-01-22 02:41:18, uptime= 389802850, timestamp=1642214478
[00:03:06.850,860] <err> time: Current Time: 15-01-22 03:41:18, uptime= 393402850, timestamp=1642218078
[01:03:06.850,891] <err> time: Current Time: 15-01-22 04:41:18, uptime= 397002850, timestamp=1642221678
[02:03:06.851,043] <err> time: Current Time: 15-01-22 05:41:18, uptime= 400602850, timestamp=1642225278
[03:03:06.850,952] <err> time: Current Time: 15-01-22 06:41:18, uptime= 404202850, timestamp=1642228878
[04:03:06.851,074] <err> time: Current Time: 15-01-22 07:41:18, uptime= 407802851, timestamp=1642232478
[05:03:06.851,470] <err> time: Current Time: 15-01-22 08:41:18, uptime= 411402851, timestamp=1642236078
[06:03:06.850,982] <err> time: Current Time: 15-01-22 09:41:18, uptime= 415002850, timestamp=1642239678
[07:03:06.851,013] <err> time: Current Time: 15-01-22 10:41:18, uptime= 418602850, timestamp=1642243278
[08:03:06.851,043] <err> time: Current Time: 15-01-22 11:41:18, uptime= 422202851, timestamp=1642246878
[09:03:06.851,074] <err> time: Current Time: 15-01-22 12:41:18, uptime= 425802851, timestamp=1642250478
[10:03:06.851,104] <err> time: Current Time: 15-01-22 13:41:18, uptime= 429402851, timestamp=1642254078
[11:03:06.851,135] <err> time: Current Time: 15-01-22 14:41:18, uptime= 433002851, timestamp=1642257678
[12:03:06.851,165] <err> time: Current Time: 15-01-22 15:41:18, uptime= 436602851, timestamp=1642261278
[13:03:06.851,196] <err> time: Current Time: 15-01-22 16:41:18, uptime= 440202851, timestamp=1642264878
[14:03:06.851,226] <err> time: Current Time: 15-01-22 17:41:18, uptime= 443802851, timestamp=1642268478
[15:03:06.851,257] <err> time: Current Time: 15-01-22 18:41:18, uptime= 447402851, timestamp=1642272078
[16:03:06.851,287] <err> time: Current Time: 15-01-22 19:41:18, uptime= 451002851, timestamp=1642275678
[17:03:06.851,318] <err> time: Current Time: 15-01-22 20:41:18, uptime= 454602851, timestamp=1642279278
[18:03:06.851,348] <err> time: Current Time: 15-01-22 21:41:18, uptime= 458202851, timestamp=1642282878
[19:03:06.851,379] <err> time: Current Time: 15-01-22 22:41:18, uptime= 461802851, timestamp=1642286478
[20:03:06.851,409] <err> time: Current Time: 15-01-22 23:41:18, uptime= 465402851, timestamp=1642290078
[21:03:06.851,440] <err> time: Current Time: 16-01-22 00:41:18, uptime= 469002851, timestamp=1642293678
[22:03:06.851,470] <err> time: Current Time: 16-01-22 01:41:18, uptime= 472602851, timestamp=1642297278
[23:03:06.851,898] <err> time: Current Time: 16-01-22 02:41:18, uptime= 476202851, timestamp=1642300878
[24:03:06.851,531] <err> time: Current Time: 16-01-22 03:41:18, uptime= 479802851, timestamp=1642304478
[25:03:06.851,562] <err> time: Current Time: 16-01-22 04:41:18, uptime= 483402851, timestamp=1642308078
[26:03:06.851,593] <err> time: Current Time: 16-01-22 05:41:18, uptime= 487002851, timestamp=1642311678
[27:03:06.851,623] <err> time: Current Time: 16-01-22 06:41:18, uptime= 490602851, timestamp=1642315278
[28:03:06.851,654] <err> time: Current Time: 16-01-22 07:41:18, uptime= 494202851, timestamp=1642318878
[29:03:06.852,111] <err> time: Current Time: 16-01-22 08:41:18, uptime= 497802852, timestamp=1642322478
[30:03:06.851,715] <err> time: Current Time: 16-01-22 09:41:18, uptime= 501402851, timestamp=1642326078
[31:03:06.851,745] <err> time: Current Time: 16-01-22 10:41:18, uptime= 505002851, timestamp=1642329678
[32:03:06.864,471] <err> time: Current Time: 16-01-22 11:41:18, uptime= 508602864, timestamp=1642333278
[33:03:06.852,264] <err> time: Current Time: 16-01-22 12:41:18, uptime= 512202852, timestamp=1642336878
[34:03:06.852,294] <err> time: Current Time: 16-01-22 13:41:18, uptime= 515802852, timestamp=1642340478
[35:03:06.852,325] <err> time: Current Time: 16-01-22 14:41:18, uptime= 519402852, timestamp=1642344078
[36:03:06.852,355] <err> time: Current Time: 16-01-22 15:41:18, uptime= 523002852, timestamp=1642347678
[00:38:34.852,386] <err> time: Current Time: 16-01-22 16:41:18, uptime= 526602852, timestamp=1642351278
[01:38:34.852,416] <err> time: Current Time: 16-01-22 17:41:18, uptime= 530202852, timestamp=1642354878
[02:38:34.852,447] <err> time: Current Time: 16-01-22 18:41:18, uptime= 533802852, timestamp=1642358478
[03:38:34.852,478] <err> time: Current Time: 16-01-22 19:41:18, uptime= 537402852, timestamp=1642362078
[04:38:34.852,478] <err> time: Current Time: 16-01-22 20:41:18, uptime= 541002852, timestamp=1642365678
[05:38:34.852,508] <err> time: Current Time: 16-01-22 21:41:18, uptime= 544602852, timestamp=1642369278
[06:38:34.852,539] <err> time: Current Time: 16-01-22 22:41:18, uptime= 548202852, timestamp=1642372878
[07:38:34.852,569] <err> time: Current Time: 16-01-22 23:41:18, uptime= 551802852, timestamp=1642376478
[08:38:34.852,630] <err> time: Current Time: 17-01-22 00:41:18, uptime= 555402852, timestamp=1642380078
[09:38:34.852,600] <err> time: Current Time: 17-01-22 01:41:18, uptime= 559002852, timestamp=1642383678
[10:38:34.852,630] <err> time: Current Time: 17-01-22 02:41:18, uptime= 562602852, timestamp=1642387278
[11:38:34.852,661] <err> time: Current Time: 10-01-22 15:18:48, uptime= 566202852, timestamp=1641827928
[12:38:34.852,691] <err> time: Current Time: 10-01-22 16:18:48, uptime= 569802852, timestamp=1641831528
[13:38:34.852,722] <err> time: Current Time: 10-01-22 17:18:48, uptime= 573402852, timestamp=1641835128
[14:38:34.852,752] <err> time: Current Time: 10-01-22 18:18:48, uptime= 577002852, timestamp=1641838728
[15:38:34.852,783] <err> time: Current Time: 10-01-22 19:18:48, uptime= 580602852, timestamp=1641842328
[15:38:34.852,783] <err> time: Current Time: 10-01-22 19:18:48, uptime= 580602852, timestamp=1641842328
[16:38:34.852,813] <err> time: Current Time: 10-01-22 20:18:48, uptime= 584202852, timestamp=1641845928
[17:38:34.852,844] <err> time: Current Time: 10-01-22 21:18:48, uptime= 587802852, timestamp=1641849528
[18:38:34.852,874] <err> time: Current Time: 10-01-22 22:18:48, uptime= 591402852, timestamp=1641853128
[19:38:34.852,905] <err> time: Current Time: 10-01-22 23:18:48, uptime= 595002852, timestamp=1641856728
[20:38:34.852,935] <err> time: Current Time: 11-01-22 00:18:48, uptime= 598602852, timestamp=1641860328
[21:38:34.852,966] <err> time: Current Time: 11-01-22 01:18:48, uptime= 602202852, timestamp=1641863928
[22:38:34.852,996] <err> time: Current Time: 11-01-22 02:18:48, uptime= 605802852, timestamp=1641867528
[23:38:34.853,027] <err> time: Current Time: 11-01-22 03:18:48, uptime= 609402852, timestamp=1641871128
[24:38:34.854,797] <err> time: Current Time: 11-01-22 04:18:48, uptime= 613002854, timestamp=1641874728
[25:38:34.853,057] <err> time: Current Time: 11-01-22 05:18:48, uptime= 616602853, timestamp=1641878328
[26:38:34.853,088] <err> time: Current Time: 11-01-22 06:18:48, uptime= 620202853, timestamp=1641881928
[27:38:34.853,118] <err> time: Current Time: 11-01-22 07:18:48, uptime= 623802853, timestamp=1641885528
[28:38:34.853,149] <err> time: Current Time: 11-01-22 08:18:48, uptime= 627402853, timestamp=1641889128
[29:38:34.853,546] <err> time: Current Time: 11-01-22 09:18:48, uptime= 631002853, timestamp=1641892728
[30:38:34.853,179] <err> time: Current Time: 11-01-22 10:18:48, uptime= 634602853, timestamp=1641896328
[31:38:34.853,210] <err> time: Current Time: 11-01-22 11:18:48, uptime= 638202853, timestamp=1641899928
[32:38:34.853,271] <err> time: Current Time: 11-01-22 12:18:48, uptime= 641802853, timestamp=1641903528
[33:38:34.853,240] <err> time: Current Time: 11-01-22 13:18:48, uptime= 645402853, timestamp=1641907128
[34:38:34.853,271] <err> time: Current Time: 11-01-22 14:18:48, uptime= 649002853, timestamp=1641910728
[35:38:34.853,302] <err> time: Current Time: 11-01-22 15:18:48, uptime= 652602853, timestamp=1641914328
[00:14:02.853,332] <err> time: Current Time: 11-01-22 16:18:48, uptime= 656202853, timestamp=1641917928
[01:14:02.853,363] <err> time: Current Time: 11-01-22 17:18:48, uptime= 659802853, timestamp=1641921528
[02:14:02.853,393] <err> time: Current Time: 11-01-22 18:18:48, uptime= 663402853, timestamp=1641925128

Parents Reply
  • It is indeed the k_ticks_to_ns_floor64 function that overflows every ~6.51 days. Looking at the code in zephyr/lib/posix/clock.c, the only way to counteract the overflow is to resync with the NTP server after a rollover, with the possibility of having gaps where the time is in the past. Syncing before the rollover will have little to no effect.

    This will happen to every board where Z_HZ_ticks=32768. So I would assume that this would be a more wide spread issue, but I couldn't find anything related to this.

Children
  • Right, most Zephyr applications don't keep track of real time, only the local system ticks, and these posix libraries are there mostly to make it easier porting linux applications as far as I've understood, which is probably why this isn't a more wide spread issue.

    I do agree it seems like it is this part of the gettime code that is causing the unfortunate quick overflow:

    elapsed_nsecs = k_ticks_to_ns_floor64(k_uptime_ticks());
    ts->tv_sec = (int32_t) (elapsed_nsecs / NSEC_PER_SEC);

    But I believe it might be the part where nsecs is divided by a billion and typecasted from uint64 to int32, and possibly not the k_ticks_to_ns_floor64 function itself.

    You might want to look into whether it could suit your application to use one of Zephyr's APIs, for example Counter which can give you an interrupt when it overflows.

    You could also report this as an issue on Zephyr's github if you believe it is not the intended behavior.

    Best regards,

    Einar

  • The problem that I was running into was caused by k_ticks_to_ns_floor64, but the overflow in z_imp_clock_gettime that you pointed out would have been an issue at an later stage.

    After searching through code on Zephyr's github, I found that this issue was reported on github (https://github.com/zephyrproject-rtos/zephyr/issues/41111). A solution was pushed to github on the day that I created this Q&A (https://github.com/zephyrproject-rtos/zephyr/pull/41602).

    The overflow that you pointed out has also been fixed (https://github.com/zephyrproject-rtos/zephyr/pull/41814).

Related