You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by GitBox <gi...@apache.org> on 2022/02/05 23:59:32 UTC

[GitHub] [incubator-nuttx] patacongo commented on pull request #5424: timer: fix operation of periodic timers

patacongo commented on pull request #5424:
URL: https://github.com/apache/incubator-nuttx/pull/5424#issuecomment-1030712544


   Subtracting one is not always the right solution.  It only works in your case, again because your specific test case is running synchronously with the system time.  But that might not always be the case.  I do not recommend using this solution.
   
   I provided you with a better, adaptive solution in #5421 that will work in ALL cases.  this case, basically one:
   
   - given the last time and desired period, it gets the desired time of the next timer expiration:
   
   `clock_t next_time= last_time + period`
   
   - At the time of the timer expiration, it calculates the error between the desired time and the actual time:
   
   `clock_t error = next_time - clock_systime_ticks();`
   
   - Then it uses that error to correct the time for the next tick:
   
   `clock_t tick = period + error`
   
   This will give you perfect timing regardless of the clock phase.
   
   You cannot defeat quantization errors by adding or subtracting one.  That just doesn't work in a robust way.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org