ArduinoThread icon indicating copy to clipboard operation
ArduinoThread copied to clipboard

What happens when millis() overflows?

Open julioj4pa opened this issue 4 years ago • 3 comments

I'm developing opens source project to sustentable agriculture. I want to know what happens when millis() overflows...

If I need to remove all threads -> reset millis() -> addition all threads back to ThreadController in main code.

Thank you and congratulation for awesome library.

julioj4pa avatar Feb 01 '20 19:02 julioj4pa

I found this, after a quick Google search:

https://www.norwegiancreations.com/2018/10/arduino-tutorial-avoiding-the-overflow-issue-when-using-millis-and-micros/

gregkrsak avatar Feb 01 '20 19:02 gregkrsak

@gregkrsak thank you for reply.

My doubt is I need to controll it in my main code? I'm a newbie, sorry.

Library code.... bool Thread::shouldRun(unsigned long time){ // If the "sign" bit is set the signed difference would be negative bool time_remaining = (time - _cached_next_run) & 0x80000000;

// Exceeded the time limit, AND is enabled? Then should run...
return !time_remaining && enabled;

}

julioj4pa avatar Feb 01 '20 19:02 julioj4pa

I think it doesn't have any problem because. _cached_next_run is unsigned long too.

So when void Thread::runned(unsigned long time){ // Saves last_run last_run = time;

// Cache next run
**_cached_next_run = last_run + interval;**

}

_cached_next_run restarts too.

julioj4pa avatar Feb 01 '20 19:02 julioj4pa