diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 41fd8b4c5fde007cb2acc3f6c3b9c6606b2f3006..a904c2559e9a1d66edb8575bd122e1faeddf3aa6 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 8736051c82b40927f9742d5abfa562024b6b7024..eaadb4debddbfbbabeaf341fde75d363c7742967 100755
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -760,8 +760,8 @@ inline void sync_plan_position_e() { planner.set_e_position_mm(current_position[
int freeMemory() { return SdFatUtil::FreeRam(); }
#else
extern "C" {
- extern unsigned int __bss_end;
- extern unsigned int __heap_start;
+ extern char __bss_end;
+ extern char __heap_start;
extern void* __brkval;
int freeMemory() {
diff --git a/Marlin/example_configurations/Cartesio/Configuration_adv.h b/Marlin/example_configurations/Cartesio/Configuration_adv.h
index 6ca71feafad928612027e84f27efa231e6f65c1c..31799acd9ffca359fb8da6986686ea41bcf644cb 100644
--- a/Marlin/example_configurations/Cartesio/Configuration_adv.h
+++ b/Marlin/example_configurations/Cartesio/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/Felix/Configuration_adv.h b/Marlin/example_configurations/Felix/Configuration_adv.h
index da00af9d19cbdcb48e10d298e102b176a2a68798..e5abb7f6ed957ac1736cc6eae1224d147d6663a5 100644
--- a/Marlin/example_configurations/Felix/Configuration_adv.h
+++ b/Marlin/example_configurations/Felix/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/Hephestos/Configuration_adv.h b/Marlin/example_configurations/Hephestos/Configuration_adv.h
index c70126d8e07e2475055f8d8105ae3b7d569e6f2d..4a9e0db475cc8ffc7d7ecbbb70e242e5dc0f8a9b 100644
--- a/Marlin/example_configurations/Hephestos/Configuration_adv.h
+++ b/Marlin/example_configurations/Hephestos/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
index 6f7c8359a29e480be524a3b427d956ce8c6dc418..a7fab871b996818849fe2a78a01ba9a60edb8ae6 100644
--- a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
+++ b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/K8200/Configuration_adv.h b/Marlin/example_configurations/K8200/Configuration_adv.h
index 6bb601c37ecfe22b0022aaa8545a3859922083f2..a19b75d0566fbe114a2dce8c16010921d8952e7f 100644
--- a/Marlin/example_configurations/K8200/Configuration_adv.h
+++ b/Marlin/example_configurations/K8200/Configuration_adv.h
@@ -520,36 +520,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/K8400/Configuration_adv.h b/Marlin/example_configurations/K8400/Configuration_adv.h
index 5a35ec0033b12c464e0a8e336ed6f7bf99d7c676..ed384c76eb22c7f6f083f9d368e6c1d2a0fe303d 100644
--- a/Marlin/example_configurations/K8400/Configuration_adv.h
+++ b/Marlin/example_configurations/K8400/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/RigidBot/Configuration_adv.h b/Marlin/example_configurations/RigidBot/Configuration_adv.h
index 1d28e9c60ff0837c52e61238c9e07e7a2969feb2..489d9fc2d7a2f67f4656c58403557f5fb900e6b3 100644
--- a/Marlin/example_configurations/RigidBot/Configuration_adv.h
+++ b/Marlin/example_configurations/RigidBot/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/SCARA/Configuration_adv.h b/Marlin/example_configurations/SCARA/Configuration_adv.h
index 842a7ef598225985097a30563bb9cd8fdeacf085..91435c38ce1d077f91ad03b521be545387115270 100644
--- a/Marlin/example_configurations/SCARA/Configuration_adv.h
+++ b/Marlin/example_configurations/SCARA/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/TAZ4/Configuration_adv.h b/Marlin/example_configurations/TAZ4/Configuration_adv.h
index a9d1b60c09fbce5463d214b6a96de154110bcf10..2c46807ca0cb06728a25405efa5ee11f525b3960 100644
--- a/Marlin/example_configurations/TAZ4/Configuration_adv.h
+++ b/Marlin/example_configurations/TAZ4/Configuration_adv.h
@@ -515,36 +515,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/WITBOX/Configuration_adv.h b/Marlin/example_configurations/WITBOX/Configuration_adv.h
index c70126d8e07e2475055f8d8105ae3b7d569e6f2d..4a9e0db475cc8ffc7d7ecbbb70e242e5dc0f8a9b 100644
--- a/Marlin/example_configurations/WITBOX/Configuration_adv.h
+++ b/Marlin/example_configurations/WITBOX/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h b/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h
index f203817fb0ebe47683aba7d4e7ce61c9ed4220b1..942f4568ea9fe8e0980c3337a1726605fc3149cb 100644
--- a/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h
@@ -509,36 +509,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/delta/generic/Configuration_adv.h b/Marlin/example_configurations/delta/generic/Configuration_adv.h
index 447fe136a2895ac1f95a334818b5425b1fc6c0a4..ef369367ca16b832b364239bf2ff7d8e913567aa 100644
--- a/Marlin/example_configurations/delta/generic/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/generic/Configuration_adv.h
@@ -509,36 +509,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
index 447fe136a2895ac1f95a334818b5425b1fc6c0a4..ef369367ca16b832b364239bf2ff7d8e913567aa 100644
--- a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
@@ -509,36 +509,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
index 908d04885e5fc3dfbf61899f3fcabd66fa3a8e69..ca1f306e49685a7fffa3acde2e38ec0fe91acea0 100644
--- a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
@@ -514,36 +514,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
index a501e1273e3b79df90d259102739c5f5efb5a13f..54ca6a3cea2523a61f0180afcf9eb1a6ae28eecd 100644
--- a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
@@ -509,36 +509,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/makibox/Configuration_adv.h b/Marlin/example_configurations/makibox/Configuration_adv.h
index ec97b4a40930c5af078524633f87615718c439ba..22b2209812f9e1f7aee652fbb34cabceafc7b12e 100644
--- a/Marlin/example_configurations/makibox/Configuration_adv.h
+++ b/Marlin/example_configurations/makibox/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
index 841ff0c26893694ca2bcf272885d1f57711f396a..e7f99b5a7f2bd8496d7f9168a8b75159548860b2 100644
--- a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
+++ b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
@@ -507,36 +507,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-//#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp
index e810113b59a98b364b98f39b35d6fb6bcfdfd382..9f3a45772c3123ad7ec925475fccecb16c5abcfb 100644
--- a/Marlin/planner.cpp
+++ b/Marlin/planner.cpp
@@ -145,7 +145,7 @@ float Planner::previous_speed[NUM_AXIS],
Planner::position_float[NUM_AXIS] = { 0 };
#endif
-#if ENABLED(ENSURE_SMOOTH_MOVES)
+#if ENABLED(ULTRA_LCD)
volatile uint32_t Planner::block_buffer_runtime_us = 0;
#endif
@@ -985,30 +985,21 @@ void Planner::_buffer_line(const float &a, const float &b, const float &c, const
const uint8_t moves_queued = movesplanned();
// Slow down when the buffer starts to empty, rather than wait at the corner for a buffer refill
+ unsigned long segment_time = lround(1000000.0 / inverse_mm_s);
#if ENABLED(SLOWDOWN)
// Segment time im micro seconds
- unsigned long segment_time = lround(1000000.0 / inverse_mm_s);
if (moves_queued > 1 && moves_queued < (BLOCK_BUFFER_SIZE) / 2) {
if (segment_time < min_segment_time) {
// buffer is draining, add extra time. The amount of time added increases if the buffer is still emptied more.
inverse_mm_s = 1000000.0 / (segment_time + lround(2 * (min_segment_time - segment_time) / moves_queued));
- #if defined(XY_FREQUENCY_LIMIT) || ENABLED(ENSURE_SMOOTH_MOVES)
+ #if defined(XY_FREQUENCY_LIMIT) || ENABLED(ULTRA_LCD)
segment_time = lround(1000000.0 / inverse_mm_s);
#endif
}
}
#endif
-
- #if ENABLED(ENSURE_SMOOTH_MOVES)
- #if DISABLED(SLOWDOWN)
- unsigned long segment_time = lround(1000000.0 / inverse_mm_s);
- #endif
- if (segment_time < (MIN_BLOCK_TIME) * 1000UL) {
- // buffer will be draining, set to MIN_BLOCK_TIME.
- inverse_mm_s = 1000000.0 / (1000.0 * (MIN_BLOCK_TIME));
- segment_time = (MIN_BLOCK_TIME) * 1000UL;
- }
- block->segment_time = segment_time;
+
+ #if ENABLED(ULTRA_LCD)
CRITICAL_SECTION_START
block_buffer_runtime_us += segment_time;
CRITICAL_SECTION_END
diff --git a/Marlin/planner.h b/Marlin/planner.h
index b0b58d821f6b396278528a5f9098122312ec5b5a..d9b87afc634876cde8e124a8671a82e1baea9b93 100644
--- a/Marlin/planner.h
+++ b/Marlin/planner.h
@@ -124,9 +124,7 @@ typedef struct {
uint32_t valve_pressure, e_to_p_pressure;
#endif
- #if ENABLED(ENSURE_SMOOTH_MOVES)
- uint32_t segment_time;
- #endif
+ uint32_t segment_time;
} block_t;
@@ -214,7 +212,7 @@ class Planner {
static float extruder_advance_k;
#endif
- #if ENABLED(ENSURE_SMOOTH_MOVES)
+ #if ENABLED(ULTRA_LCD)
volatile static uint32_t block_buffer_runtime_us; //Theoretical block buffer runtime in µs
#endif
@@ -381,33 +379,35 @@ class Planner {
static block_t* get_current_block() {
if (blocks_queued()) {
block_t* block = &block_buffer[block_buffer_tail];
- #if ENABLED(ENSURE_SMOOTH_MOVES)
+ #if ENABLED(ULTRA_LCD)
block_buffer_runtime_us -= block->segment_time; //We can't be sure how long an active block will take, so don't count it.
#endif
SBI(block->flag, BLOCK_BIT_BUSY);
return block;
}
else {
- #if ENABLED(ENSURE_SMOOTH_MOVES)
+ #if ENABLED(ULTRA_LCD)
clear_block_buffer_runtime(); // paranoia. Buffer is empty now - so reset accumulated time to zero.
#endif
return NULL;
}
}
- #if ENABLED(ENSURE_SMOOTH_MOVES)
- static bool long_move() {
+ #if ENABLED(ULTRA_LCD)
+
+ static millis_t block_buffer_runtime() {
CRITICAL_SECTION_START
- uint32_t bbru = block_buffer_runtime_us;
+ millis_t bbru = block_buffer_runtime_us;
CRITICAL_SECTION_END
- return !bbru || bbru > (LCD_UPDATE_THRESHOLD) * 1000UL + (MIN_BLOCK_TIME) * 3000UL;
+ return bbru;
}
-
+
static void clear_block_buffer_runtime(){
CRITICAL_SECTION_START
block_buffer_runtime_us = 0;
CRITICAL_SECTION_END
}
+
#endif
#if ENABLED(AUTOTEMP)
diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp
index 82289a5d6c48de682af79b7d175c3bdfc4b36edf..b0a7e2250b3a2a145f996ae1281e19b4e1c596b7 100644
--- a/Marlin/stepper.cpp
+++ b/Marlin/stepper.cpp
@@ -1098,13 +1098,13 @@ void Stepper::finish_and_disable() {
void Stepper::quick_stop() {
cleaning_buffer_counter = 5000;
- #if ENABLED(ENSURE_SMOOTH_MOVES)
- planner.clear_block_buffer_runtime();
- #endif
DISABLE_STEPPER_DRIVER_INTERRUPT();
while (planner.blocks_queued()) planner.discard_current_block();
current_block = NULL;
ENABLE_STEPPER_DRIVER_INTERRUPT();
+ #if ENABLED(ULTRA_LCD)
+ planner.clear_block_buffer_runtime();
+ #endif
}
void Stepper::endstop_triggered(AxisEnum axis) {
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index c762ea898efaef1c7f7b9979763bdd756cba2924..11d63728e72036e1b63e4e99a66b8d7375d3e15d 100755
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -64,6 +64,8 @@ void lcd_status_screen();
millis_t next_lcd_update_ms;
uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to draw, decrements after every draw. Set to 2 in LCD routines so the LCD gets at least 1 full redraw (first redraw is partial)
+millis_t max_display_update_time = 0;
+
#if ENABLED(DOGLCD)
bool drawing_screen = false;
#endif
@@ -2893,7 +2895,11 @@ void lcd_update() {
#endif //SDSUPPORT && SD_DETECT_PIN
millis_t ms = millis();
- if (ELAPSED(ms, next_lcd_update_ms)) {
+ if (ELAPSED(ms, next_lcd_update_ms)
+ #if ENABLED(DOGLCD)
+ || drawing_screen
+ #endif
+ ) {
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL;
@@ -2954,101 +2960,98 @@ void lcd_update() {
}
#endif // ULTIPANEL
- #if ENABLED(ENSURE_SMOOTH_MOVES) && ENABLED(ALWAYS_ALLOW_MENU)
- #define STATUS_UPDATE_CONDITION planner.long_move()
- #else
- #define STATUS_UPDATE_CONDITION true
- #endif
- #if ENABLED(ENSURE_SMOOTH_MOVES) && DISABLED(ALWAYS_ALLOW_MENU)
- #define LCD_HANDLER_CONDITION planner.long_move()
- #else
- #define LCD_HANDLER_CONDITION true
- #endif
-
// We arrive here every ~100ms when idling often enough.
// Instead of tracking the changes simply redraw the Info Screen ~1 time a second.
static int8_t lcd_status_update_delay = 1; // first update one loop delayed
- if (STATUS_UPDATE_CONDITION &&
+ if (
#if ENABLED(ULTIPANEL)
currentScreen == lcd_status_screen &&
#endif
- !lcd_status_update_delay--
+ !lcd_status_update_delay--
) {
- lcd_status_update_delay = 9;
- lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
- }
-
- if (LCD_HANDLER_CONDITION) {
-
+ lcd_status_update_delay = 9
#if ENABLED(DOGLCD)
- if (lcdDrawUpdate || drawing_screen)
- #else
- if (lcdDrawUpdate)
+ + 3
#endif
- {
- #if ENABLED(DOGLCD)
- if (!drawing_screen)
- #endif
- {
- switch (lcdDrawUpdate) {
- case LCDVIEW_CALL_NO_REDRAW:
- lcdDrawUpdate = LCDVIEW_NONE;
- break;
- case LCDVIEW_CLEAR_CALL_REDRAW: // set by handlers, then altered after (rarely occurs here)
- case LCDVIEW_CALL_REDRAW_NEXT: // set by handlers, then altered after (never occurs here?)
- lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
- case LCDVIEW_REDRAW_NOW: // set above, or by a handler through LCDVIEW_CALL_REDRAW_NEXT
- case LCDVIEW_NONE:
- break;
- } // switch
- }
- #if ENABLED(ULTIPANEL)
- #define CURRENTSCREEN() (*currentScreen)(), lcd_clicked = false
- #else
- #define CURRENTSCREEN() lcd_status_screen()
- #endif
-
- #if ENABLED(DOGLCD) // Changes due to different driver architecture of the DOGM display
- if (!drawing_screen) {
- u8g.firstPage();
- drawing_screen = 1;
- }
- lcd_setFont(FONT_MENU);
- CURRENTSCREEN();
- if (drawing_screen && (drawing_screen = u8g.nextPage())) return;
- #else
- CURRENTSCREEN();
- #endif
- }
-
- #if ENABLED(ULTIPANEL)
-
- // Return to Status Screen after a timeout
- if (currentScreen == lcd_status_screen || defer_return_to_status)
- return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS;
- else if (ELAPSED(ms, return_to_status_ms))
- lcd_return_to_status();
+ ;
+ max_display_update_time--;
+ lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
+ }
- #endif // ULTIPANEL
+ millis_t bbr = planner.block_buffer_runtime();
+ #if ENABLED(DOGLCD)
+ if ((lcdDrawUpdate || drawing_screen) && (!bbr || (bbr > max_display_update_time * 2000)))
+ #else
+ if (lcdDrawUpdate && (!bbr || (bbr > max_display_update_time * 2000)))
+ #endif
+ {
#if ENABLED(DOGLCD)
if (!drawing_screen)
#endif
{
switch (lcdDrawUpdate) {
- case LCDVIEW_CLEAR_CALL_REDRAW:
- lcd_implementation_clear();
- case LCDVIEW_CALL_REDRAW_NEXT:
- lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
- break;
- case LCDVIEW_REDRAW_NOW:
+ case LCDVIEW_CALL_NO_REDRAW:
lcdDrawUpdate = LCDVIEW_NONE;
break;
+ case LCDVIEW_CLEAR_CALL_REDRAW: // set by handlers, then altered after (rarely occurs here)
+ case LCDVIEW_CALL_REDRAW_NEXT: // set by handlers, then altered after (never occurs here?)
+ lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
+ case LCDVIEW_REDRAW_NOW: // set above, or by a handler through LCDVIEW_CALL_REDRAW_NEXT
case LCDVIEW_NONE:
break;
} // switch
}
- } // LCD_HANDLER_CONDITION
+ #if ENABLED(ULTIPANEL)
+ #define CURRENTSCREEN() (*currentScreen)(), lcd_clicked = false
+ #else
+ #define CURRENTSCREEN() lcd_status_screen()
+ #endif
+
+ #if ENABLED(DOGLCD) // Changes due to different driver architecture of the DOGM display
+ if (!drawing_screen) {
+ u8g.firstPage();
+ drawing_screen = 1;
+ }
+ lcd_setFont(FONT_MENU);
+ CURRENTSCREEN();
+ if (drawing_screen && (drawing_screen = u8g.nextPage())) {
+ max_display_update_time = max(max_display_update_time, millis() - ms);
+ return;
+ }
+ #else
+ CURRENTSCREEN();
+ #endif
+ max_display_update_time = max(max_display_update_time, millis() - ms);
+ }
+
+ #if ENABLED(ULTIPANEL)
+
+ // Return to Status Screen after a timeout
+ if (currentScreen == lcd_status_screen || defer_return_to_status)
+ return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS;
+ else if (ELAPSED(ms, return_to_status_ms))
+ lcd_return_to_status();
+
+ #endif // ULTIPANEL
+
+ #if ENABLED(DOGLCD)
+ if (!drawing_screen)
+ #endif
+ {
+ switch (lcdDrawUpdate) {
+ case LCDVIEW_CLEAR_CALL_REDRAW:
+ lcd_implementation_clear();
+ case LCDVIEW_CALL_REDRAW_NEXT:
+ lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
+ break;
+ case LCDVIEW_REDRAW_NOW:
+ lcdDrawUpdate = LCDVIEW_NONE;
+ break;
+ case LCDVIEW_NONE:
+ break;
+ } // switch
+ }
} // ELAPSED(ms, next_lcd_update_ms)
}