diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 8bb757c5e..3526bae66 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -378,6 +378,10 @@ void save_print_file_state(); void restore_print_file_state(); void save_planner_global_state(); void refresh_print_state_in_ram(); + +/// Updates the feedrate multiplier when a print is saved such that +/// it is not overwritten when the print is later resumed +void refresh_saved_feedrate_multiplier_in_ram(); void clear_print_state_in_ram(); extern void stop_and_save_print_to_ram(float z_move, float e_move); void restore_extruder_temperature_from_ram(); diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 054aa3448..ed90d6238 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -10562,6 +10562,15 @@ void refresh_print_state_in_ram() isPartialBackupAvailable = true; } +void __attribute__((noinline)) refresh_saved_feedrate_multiplier_in_ram() { + if (!saved_printing) { + // There is no saved print, therefore nothing to refresh + return; + } + + saved_feedmultiply2 = feedmultiply; +} + void clear_print_state_in_ram() { // Set flag to false in order to avoid using diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index e6b90a9f4..461e86e3e 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -714,6 +714,7 @@ void lcd_status_screen() // NOT static due to using ins if (initial_feedmultiply != feedmultiply) { feedmultiply = constrain(feedmultiply, 10, 999); lcd_encoder = 0; // Consume rotation event + refresh_saved_feedrate_multiplier_in_ram(); } } #endif //ULTIPANEL_FEEDMULTIPLY @@ -5434,6 +5435,9 @@ static void lcd_tune_menu() SilentModeMenu = eeprom_read_byte((uint8_t*) EEPROM_SILENT); MENU_BEGIN(); + ON_MENU_LEAVE( + refresh_saved_feedrate_multiplier_in_ram(); + ); MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_EDIT_int3_P(_i("Speed"), &feedmultiply, 10, 999);////MSG_SPEED c=15