Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
Per Westermark
06/19/09 13:05
Read: 114 times
Sweden


 
#166262 - Try unsigned subtraction with borrow
Responding to: Andy Peters's previous message
Let's say you have a 16-bit counter ticking downward and automatically going from 0 to 0xffff on turn-around.

Let's say you want to wait 4900 ticks, so you write:
if (start-current >= 4900) have_timeout();

Let's say you make your first sample at 53719.
53719-53719 = 0, so not time yet.
53719-53718 = 1, so not time yet.
53719-53717 = 2, so not time yet.
...
53719-48820 = 4899, so not time yet.
53719-48819 = 4900 => timeout.
53719-48818 = 4901, so we are one tick late.
...

Let's now say that your first sample was at 3019, i.e. the timer will turn around during your wait.
3019-3019 = 0, so not time yet.
3019-3018 = 1, so not time yet.
...
3019-0 = 3019, so not time yet.
(time for a turnaround)
3019-65535 = -62516 which is 0xffff0bcc in 32-bit hex or 0x0bcc in 16-bit hex or 3020 decimal.
...
3019-63656 = -60637 which is 0xffff1323 in 32-bit hex or 0x1323 in 16-bit hex or 4899 decimal. Not yet.
3019-63655 = -60636 which is 0xffff1324 in 32-bit hex or 0x1324 in 16-bit hex or 4900 decimal. Timeout
3019-63654 = -60635 which is 0xffff1325 in 32-bit hex or 0x1325 in 16-bit hex or 4901 decimal. One tick late

The subtraction will still produce the correct number of ticks after the turnaround. But you have to be a bit careful if your delay time gets close to the full period time of the timer, since the amount of ticks available for detecting the end of the delay may not be enough. If the timer ticks with 1MHz and your loop can't guarantee that it polls time timer more often than every 100us, then a 16-bit timer would be unsafe to use with this method if your delay is so long that it gets close to 65536-100.

List of 30 messages in thread
TopicAuthorDate
s/w delay function      Sandeep Gupta      06/02/09 00:50      
   Software loops can be optimized away      Per Westermark      06/02/09 01:07      
   lacks side-effects      Neil Kurzman      06/02/09 01:07      
      First time with LINT?      Andy Neil      06/02/09 01:19      
   lacks side-effects      Andy Neil      06/02/09 01:07      
      That does not mean it is an error.      Neil Kurzman      06/02/09 01:12      
      It also blocks      Jez Smith      06/02/09 01:49      
   How to post legible source code      Andy Neil      06/02/09 01:13      
   DELAY_0.1.ZIP Useful?      Murray R. Van Luyn      06/14/09 22:11      
      That doesn't help, and it won't work anyhow!      Andy Neil      06/15/09 01:54      
         I stand by it.      Murray R. Van Luyn      06/15/09 19:21      
            Yes a delay function is useful      David Prentice      06/16/09 02:39      
               wrong !!!!      Erik Malund      06/16/09 08:46      
               No, that's precisely where you're wrong      Andy Neil      06/16/09 12:35      
            How can you say that?      Andy Neil      06/16/09 12:43      
               I think you should read Murray's comments      David Prentice      06/16/09 15:20      
                  I have seen ...      Erik Malund      06/16/09 15:45      
                     Timers usable without start/stop too        Per Westermark      06/16/09 16:30      
                        free-running counter/timer      Andy Peters      06/18/09 17:30      
                           Unsigned integers      Per Westermark      06/18/09 17:39      
                              re: unsigned      Andy Peters      06/19/09 12:16      
                                 Try unsigned subtraction with borrow      Per Westermark      06/19/09 13:05      
                                 bug in second (improved!?) code block      Andy Peters      06/19/09 16:38      
   Delay Loops in 'C'..!!! NO      Mahesh Joshi      06/16/09 05:44      
      Go on. Suggest a SIMPLE alternative      David Prentice      06/16/09 06:20      
         My Methods      Mahesh Joshi      06/16/09 07:21      
            So he has a long list of constraints      David Prentice      06/16/09 07:46      
               oh boy what a load who wil have 10 minutes for this      Erik Malund      06/16/09 08:55      
                  Ok. I was being naughty.      David Prentice      06/16/09 10:28      
                     you forget the obvious ...      Erik Malund      06/16/09 10:49      

Back to Subject List