Author Topic: Test Patch for Global Timers  (Read 6011 times)

Offline mark

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 3236
    • View Profile
    • uTasker
Test Patch for Global Timers
« 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);
        }