Some theory…
os_time
is based on millis
, it is a scaled down version of millis
to avoid to overflow too often.
To keep the os_time
counter accurate, it needs to detect millis
overflow, which happens after approx 71 minutes.
The detection algorithm looks at a flip of the most significant bit of millis
.
Now if you sleep one hour, most of the time (1 out of 6) you will have a millis
overflow, and it won’t be detected as the increment is big enough to keep the msb unchanged!
And if you are out of luck, it will go backwards…
This is not a proven theory, it is just my gut feeling reading the code, but you could validate it easily by calling os_getTime()
each time you wake up (every 2 secs) to allows overflow detection.