PDA

View Full Version : TIMER_MS overflow detection


josep
03-15-2007, 10:40 AM
Hi,

Being reseted at startup, and being defined 32bit, I see that MS_TIMER will overflow once each ~50 days.

There is "anything" signalling the situation of MS_TIMER overflow? Or should I check for the previous value of MS_TIMER every function tick to detect it?

Thanks,

Luc Verstreken
12-18-2007, 06:04 AM
See the following section in the DC User manual.

7.3.2 Example: Delay Loop
An important detail about MS_TIMER is that it overflows (“rolls over”) approximately every 49 days, 17
hours. This behavior causes the following delay loop code to fail:
/* THIS CODE WILL FAIL!! */
endtime = MS_TIMER + delay;
while (MS_TIMER < endtime) {
//do something
}
If “MS_TIMER + delay” overflows, this returns immediately. The correct way to code the delay loop so
that an overflow of MS_TIMER does not break it, is this:
endtime = MS_TIMER + delay;
while ((long)MS_TIMER - endtime < 0) {
//do something
}

With kind regards,

Luc Verstreken

tharaka
02-05-2008, 07:07 AM
Why dont you use the RTC?
Set MS_TIMER to zero every time when you know the time right.