Re: NutSleep Overflow Fix

Ole Reinhardt <ole.reinhardt-L1vi/[email protected]>
Newsgroups gmane.comp.hardware.microcontrollers.ethernut
Message-ID <[email protected]>
Hi All,

while cleaning my unread mails on the mailinglist, I stumbled uppon this
mail from Bob Wirka, who found an overflow problem with timeouts >
2^32-1 ms.

This issue just had been fixed on several architectures with Haralds
patch in r2964. I now applied it in r6267 to all further architectures,
where it still was missing (arm, cortex-m, coldfire).

Best regards,

Ole

Am 16.08.2013 um 17:25 schrieb Bob Wirka:
> Hello,
> 
> NutSleep(uint32_t ms) will not work properly if  'ms' is greater than 4,294,967 (0xffffffff / 10000)
> 
> This is because the calculation in NutTimerMillisToTicks() will overflow.
> 
> Below is my fix:
> 
> /*!
>  * \brief Calculate system ticks for a given number of milliseconds.
>  */
> uint32_t NutTimerMillisToTicks(uint32_t ms)
> {
>     unsigned long long        product;
> 
>     product = (unsigned long long)ms * (unsigned long long)NutGetTickClock();
>     return product / 1000;
> 
>     /*
>      * _RCW_: 16-Aug-2013 : This would overflow for ms values > 4,294,967, as
>      * the product of ms * NutGetTickClock() had to be <= 0xffff_ffff.
>      */
> //    return (ms * NutGetTickClock()) / 1000;
> }
> 
> Best regards,
> 
> Bob Wirka
> Realtime Control Works
> Janesville, WI
> _______________________________________________
> http://lists.egnite.de/mailman/listinfo/en-nut-discussion
> 

-- 
kernel concepts GmbH            Tel: +49-271-771091-14
Sieghuetter Hauptweg 48         Mob: +49-177-7420433
D-57072 Siegen
http://www.embedded-it.de
http://www.kernelconcepts.de
_______________________________________________
http://lists.egnite.de/mailman/listinfo/en-nut-discussion
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.