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
  • Hello!

    Sounds like this could be the RTC overflowing, which happens regularly at an interval determined by the RTC prescaler:

    https://infocenter.nordicsemi.com/topic/ps_nrf9160/rtc.html

    Do you know what the prescaler is set to in your application? Does it match the interval you've observed?

    Best regards,

    Einar

  • Hi Einarh,

    I don't know what the prescaler setting is. Do you know where I can find it in the sdk?
    If it is the RTC that overflows, shouldn't the uptime also be affected (decrease)?

    Best regards,

    esscriber

  • You might be right, it could just be the k_ticks_to_ns_floor64 function overflowing.

    One way to interface with the RTC is through Zephyr's Counter API:

    http://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/reference/peripherals/counter.html#counter-api

    -Einar

  • 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.

  • 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

Reply
  • 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

Children
Related