From 907aed57db9a8242312ddee3267fe2d46f907f7c Mon Sep 17 00:00:00 2001 From: gralco Date: Fri, 8 Apr 2016 14:27:08 -0600 Subject: [PATCH] Fix bug which can cause an infinite M109 loop Since residency_start_ms is -1 when entering the heatup while loop whilst the hotend temp is close to the target them already then it may not escape. Hence "Start the TEMP_RESIDENCY_TIME timer when we reach target temp for the first time." --- Marlin/Marlin_main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index f9bb9de309..100c636485 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -4325,7 +4325,8 @@ inline void gcode_M109() { #ifdef TEMP_RESIDENCY_TIME // Start the TEMP_RESIDENCY_TIME timer when we reach target temp for the first time. // Restart the timer whenever the temperature falls outside the hysteresis. - if (labs(degHotend(target_extruder) - degTargetHotend(target_extruder)) > ((residency_start_ms < 0) ? TEMP_WINDOW : TEMP_HYSTERESIS)) + if ((residency_start_ms <= 0 && labs(degHotend(target_extruder) - degTargetHotend(target_extruder)) < TEMP_WINDOW) || + (labs(degHotend(target_extruder) - degTargetHotend(target_extruder)) > ((residency_start_ms < 0) ? TEMP_WINDOW : TEMP_HYSTERESIS))) residency_start_ms = millis(); #endif //TEMP_RESIDENCY_TIME