
Dear =?ISO-8859-1?Q?Matthias_Wei=DFer?=,
In message 4C5FA669.6070303@arcor.de you wrote:
- tmo = usec_to_tick(usec);
- tmp = get_ticks() + tmo; /* get current timestamp */
- while (get_ticks()< tmp) /* loop till event */
/*NOP*/;
This is broken when the timer wraps around. Compare the limit against the difference, to make use of unsigned arithmetics.
Isn't this a theoretical problem? The timer increments with approx. 160kHz. get_ticks() returns a 64 bit value which wraps all ~ 3*10^6 years. I don't expect my hardware to work that long without a reboot.
Such assumptions that problems might remain theoretical have cuased enough real problems already. I mean, if it was difficult to write correct code I might turn a blind eye, but why not fix it? It's a trivial change...
Can you point me to an example where the timer stuff is done right? I see it done differently on nearly all ARM SOCs.
Rule of a thumb: to copy from ARM means copying problems.
Use: while ((get_ticks() - tmp) < tmo) ;
Best regards,
Wolfgang Denk