From 363f324179b608d3be5eabcb0e964ee8a9d0b2ab Mon Sep 17 00:00:00 2001 From: Teemo Vaas Date: Fri, 22 Dec 2023 06:47:36 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20Fix=20G4=20Dwell=20overflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/millis_t.h | 5 ++++- Marlin/src/gcode/gcode.cpp | 8 ++++---- Marlin/src/gcode/gcode.h | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Marlin/src/core/millis_t.h b/Marlin/src/core/millis_t.h index e7032a2e55..7c00b91a5b 100644 --- a/Marlin/src/core/millis_t.h +++ b/Marlin/src/core/millis_t.h @@ -30,5 +30,8 @@ typedef uint32_t millis_t; #define MS_TO_SEC(N) millis_t((N)/1000UL) #define MS_TO_SEC_PRECISE(N) (float(N)/1000.0f) -#define PENDING(NOW,SOON) ((int32_t)(NOW-(SOON))<0) +#define FUTURE(START,DURA) (millis_t(millis()-(START))<(DURA)) +#define PAST(START,DURA) (!FUTURE(START,DURA)) + +#define PENDING(NOW,SOON) (int32_t((NOW)-(SOON))<0) #define ELAPSED(NOW,SOON) (!PENDING(NOW,SOON)) diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 881149fb52..69d77e875e 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -242,11 +242,11 @@ void GcodeSuite::get_destination_from_command() { } /** - * Dwell waits immediately. It does not synchronize. Use M400 instead of G4 + * Dwell waits immediately. It does not synchronize. */ -void GcodeSuite::dwell(millis_t time) { - time += millis(); - while (PENDING(millis(), time)) idle(); +void GcodeSuite::dwell(const millis_t time) { + const millis_t startMillis = millis(); + while (FUTURE(startMillis, time)) idle(); } /** diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index e86a58d85d..1f3ccba37c 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -503,7 +503,7 @@ public: #define KEEPALIVE_STATE(N) NOOP #endif - static void dwell(millis_t time); + static void dwell(const millis_t time); private: