mirror of https://github.com/arendst/Tasmota.git
Simplified TimeDifference (saves 16 bytes)
This commit is contained in:
parent
ceef563414
commit
77191f2fe9
|
@ -1244,45 +1244,18 @@ void TemplateJson(void)
|
||||||
* Sleep aware time scheduler functions borrowed from ESPEasy
|
* Sleep aware time scheduler functions borrowed from ESPEasy
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
long TimeDifference(unsigned long prev, unsigned long next)
|
inline int32_t TimeDifference(uint32_t prev, uint32_t next) {
|
||||||
{
|
return ((int32_t) (next - prev));
|
||||||
// Return the time difference as a signed value, taking into account the timers may overflow.
|
|
||||||
// Returned timediff is between -24.9 days and +24.9 days.
|
|
||||||
// Returned value is positive when "next" is after "prev"
|
|
||||||
long signed_diff = 0;
|
|
||||||
// To cast a value to a signed long, the difference may not exceed half 0xffffffffUL (= 4294967294)
|
|
||||||
const unsigned long half_max_unsigned_long = 2147483647u; // = 2^31 -1
|
|
||||||
if (next >= prev) {
|
|
||||||
const unsigned long diff = next - prev;
|
|
||||||
if (diff <= half_max_unsigned_long) { // Normal situation, just return the difference.
|
|
||||||
signed_diff = static_cast<long>(diff); // Difference is a positive value.
|
|
||||||
} else {
|
|
||||||
// prev has overflow, return a negative difference value
|
|
||||||
signed_diff = static_cast<long>((0xffffffffUL - next) + prev + 1u);
|
|
||||||
signed_diff = -1 * signed_diff;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// next < prev
|
|
||||||
const unsigned long diff = prev - next;
|
|
||||||
if (diff <= half_max_unsigned_long) { // Normal situation, return a negative difference value
|
|
||||||
signed_diff = static_cast<long>(diff);
|
|
||||||
signed_diff = -1 * signed_diff;
|
|
||||||
} else {
|
|
||||||
// next has overflow, return a positive difference value
|
|
||||||
signed_diff = static_cast<long>((0xffffffffUL - prev) + next + 1u);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return signed_diff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
long TimePassedSince(unsigned long timestamp)
|
int32_t TimePassedSince(uint32_t timestamp)
|
||||||
{
|
{
|
||||||
// Compute the number of milliSeconds passed since timestamp given.
|
// Compute the number of milliSeconds passed since timestamp given.
|
||||||
// Note: value can be negative if the timestamp has not yet been reached.
|
// Note: value can be negative if the timestamp has not yet been reached.
|
||||||
return TimeDifference(timestamp, millis());
|
return TimeDifference(timestamp, millis());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TimeReached(unsigned long timer)
|
bool TimeReached(uint32_t timer)
|
||||||
{
|
{
|
||||||
// Check if a certain timeout has been reached.
|
// Check if a certain timeout has been reached.
|
||||||
const long passed = TimePassedSince(timer);
|
const long passed = TimePassedSince(timer);
|
||||||
|
|
Loading…
Reference in New Issue