diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 41fd8b4c5..a904c2559 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 b8ac33459..66e9ecdcd 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 6ca71feaf..31799acd9 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 da00af9d1..e5abb7f6e 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 c70126d8e..4a9e0db47 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 6f7c8359a..a7fab871b 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 6bb601c37..a19b75d05 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 5a35ec003..ed384c76e 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 1d28e9c60..489d9fc2d 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 842a7ef59..91435c38c 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 a9d1b60c0..2c46807ca 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 c70126d8e..4a9e0db47 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 f203817fb..942f4568e 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 447fe136a..ef369367c 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 447fe136a..ef369367c 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 908d04885..ca1f306e4 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 a501e1273..54ca6a3ce 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 ec97b4a40..22b220981 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 841ff0c26..e7f99b5a7 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 e810113b5..9f3a45772 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 b0b58d821..d9b87afc6 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 82289a5d6..b0a7e2250 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 c762ea898..11d63728e 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; + lcd_status_update_delay = 9 + #if ENABLED(DOGLCD) + + 3 + #endif + ; + max_display_update_time--; lcdDrawUpdate = LCDVIEW_REDRAW_NOW; } - if (LCD_HANDLER_CONDITION) { - - #if ENABLED(DOGLCD) - if (lcdDrawUpdate || drawing_screen) - #else - if (lcdDrawUpdate) - #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(); - - #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) }