µTasker Forum
µTasker Forum => µTasker general => Topic started by: mark on October 22, 2010, 01:44:45 PM
-
Hi All
As situation has been detected when using multiple global SW timers where a newly added timeout can fire too early.
A patch is being tested which seems to solve this.
Below is the change that has been made so that others can test if desired - there are no know side effect at the moment but the original problem seems to have been solved.
Regards
Mark
File: GlobalTimer.c
Routine: static void fnStartNewTimer(TIMER_BLOCK *ptrNewTimer)
Original:
if (RemainingTime > ptrNewTimer->TimerDelay) {
fnReduceSWTimers(ptrNewTimer, (unsigned char)(NextFire - (unsigned char)RemainingTime));
uTaskerMonoTimer( OWN_TASK, (DELAY_LIMIT)ptrNewTimer->TimerDelay, E_TIMER_FIRED );
TimeStamp = uTaskerSystemTick;
NextFire = ptrNewTimer->TimerDelay;
}
Patch:
if (RemainingTime > ptrNewTimer->TimerDelay) {
fnReduceSWTimers(ptrNewTimer, (DELAY_LIMIT)(NextFire - RemainingTime));
uTaskerMonoTimer( OWN_TASK, (DELAY_LIMIT)ptrNewTimer->TimerDelay, E_TIMER_FIRED );
TimeStamp = uTaskerSystemTick;
NextFire = ptrNewTimer->TimerDelay;
}
else {
ptrNewTimer->TimerDelay += (NextFire - RemainingTime);
}