[En-Nut-Discussion] NutSleep Overflow Fix
Bob Wirka
bobwirka at yahoo.com
Fri Aug 16 17:32:01 CEST 2013
PS: I'm using ethernut-4.10.3 with an AT91SAM7X512.
Best,
Bob Wirka
Realtime Control Works
Janesville, WI
________________________________
From: Bob Wirka <bobwirka at yahoo.com>
To: "en-nut-discussion at egnite.de" <en-nut-discussion at egnite.de>
Sent: Friday, August 16, 2013 10:25 AM
Subject: [En-Nut-Discussion] NutSleep Overflow Fix
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
More information about the En-Nut-Discussion
mailing list