From a8d16d29491a1f262f13c7902c5b7681c1ab4170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 14 Aug 2021 21:35:30 +0000 Subject: [PATCH 01/27] Use memset to zero previous_speed array Saves 150 bytes of flash memory --- Firmware/planner.cpp | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/Firmware/planner.cpp b/Firmware/planner.cpp index 3361e1a1..2b77c58e 100644 --- a/Firmware/planner.cpp +++ b/Firmware/planner.cpp @@ -459,10 +459,7 @@ void plan_init() { #ifdef LIN_ADVANCE memset(position_float, 0, sizeof(position_float)); // clear position #endif - previous_speed[0] = 0.0; - previous_speed[1] = 0.0; - previous_speed[2] = 0.0; - previous_speed[3] = 0.0; + memset(previous_speed, 0, sizeof(previous_speed)); previous_nominal_speed = 0.0; plan_reset_next_e_queue = false; plan_reset_next_e_sched = false; @@ -678,10 +675,7 @@ void planner_abort_hard() #endif // Resets planner junction speeds. Assumes start from rest. previous_nominal_speed = 0.0; - previous_speed[0] = 0.0; - previous_speed[1] = 0.0; - previous_speed[2] = 0.0; - previous_speed[3] = 0.0; + memset(previous_speed, 0, sizeof(previous_speed)); plan_reset_next_e_queue = false; plan_reset_next_e_sched = false; @@ -1412,10 +1406,7 @@ void plan_set_position(float x, float y, float z, const float &e) #endif st_set_position(position[X_AXIS], position[Y_AXIS], position[Z_AXIS], position[E_AXIS]); previous_nominal_speed = 0.0; // Resets planner junction speeds. Assumes start from rest. - previous_speed[0] = 0.0; - previous_speed[1] = 0.0; - previous_speed[2] = 0.0; - previous_speed[3] = 0.0; + memset(previous_speed, 0, sizeof(previous_speed)); } // Only useful in the bed leveling routine, when the mesh bed leveling is off. From 52aa5a5f00564d6f67ebaba383f9b90675ed3ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 14 Aug 2021 21:43:00 +0000 Subject: [PATCH 02/27] Use inlined function set_destination_to_current() in more places Saves 70 bytes of flash memory --- Firmware/Marlin_main.cpp | 12 ++++++------ Firmware/mesh_bed_calibration.cpp | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 284262d6..2821d213 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2827,7 +2827,7 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon enable_endstops(true); - memcpy(destination, current_position, sizeof(destination)); + set_destination_to_current(); feedrate = 0.0; #if Z_HOME_DIR > 0 // If homing away from BED do Z first @@ -3850,7 +3850,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float plan_set_e_position(lastpos[E_AXIS]); memcpy(current_position, lastpos, sizeof(lastpos)); - memcpy(destination, current_position, sizeof(current_position)); + set_destination_to_current(); //Recover feed rate feedmultiply = feedmultiplyBckp; @@ -9115,7 +9115,7 @@ Sigma_Exit: #if EXTRUDERS > 1 if (tmp_extruder != active_extruder) { // Save current position to return to after applying extruder offset - memcpy(destination, current_position, sizeof(destination)); + set_destination_to_current(); // Offset extruder (only by XY) int i; for (i = 0; i < 2; i++) { @@ -11442,7 +11442,7 @@ bool recover_machine_state_after_power_panic() // 5) Set the physical positions from the logical positions using the world2machine transformation // This is only done to inizialize Z/E axes with physical locations, since X/Y are unknown. clamp_to_software_endstops(current_position); - memcpy(destination, current_position, sizeof(destination)); + set_destination_to_current(); plan_set_position_curposXYZE(); SERIAL_ECHOPGM("recover_machine_state_after_power_panic, initial "); print_world_coordinates(); @@ -11775,7 +11775,7 @@ void stop_and_save_print_to_ram(float z_move, float e_move) plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS] + z_move, saved_pos[E_AXIS] + e_move, homing_feedrate[Z_AXIS], active_extruder); st_synchronize(); //wait moving memcpy(current_position, saved_pos, sizeof(saved_pos)); - memcpy(destination, current_position, sizeof(destination)); + set_destination_to_current(); #endif waiting_inside_plan_buffer_line_print_aborted = true; //unroll the stack } @@ -11843,7 +11843,7 @@ void restore_print_from_ram_and_continue(float e_move) feedmultiply = saved_feedmultiply2; memcpy(current_position, saved_pos, sizeof(saved_pos)); - memcpy(destination, current_position, sizeof(destination)); + set_destination_to_current(); if (saved_printing_type == PRINTING_TYPE_SD) { //was sd printing card.setIndex(saved_sdpos); sdpos_atomic = saved_sdpos; diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index f9785105..23d7c873 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -2852,7 +2852,7 @@ bool sample_mesh_and_store_reference() current_position[Y_AXIS] = BED_Y0; world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]); go_to_current(homing_feedrate[X_AXIS]/60); - memcpy(destination, current_position, sizeof(destination)); + set_destination_to_current(); enable_endstops(true); homeaxis(Z_AXIS); From 58213814cf06784f097d4f2551371efbf870992b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 14 Aug 2021 21:55:21 +0000 Subject: [PATCH 03/27] Replace for-loop with memcpy Saves 22 bytes of flash memory --- Firmware/Marlin_main.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 2821d213..e669c58a 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -9767,9 +9767,8 @@ void prepare_arc_move(char isclockwise) { // As far as the parser is concerned, the position is now == target. In reality the // motion control system might still be processing the action and the real tool position // in any intermediate location. - for(int8_t i=0; i < NUM_AXIS; i++) { - current_position[i] = destination[i]; - } + set_current_to_destination(); + previous_millis_cmd = _millis(); } From 800f44509d29f6896ae576ea82c340207092a02f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Thu, 19 Aug 2021 21:20:30 +0000 Subject: [PATCH 04/27] Change row_offsets[] to uint8_t Saves 10 bytes of flash, and 4 bytes of SRAM --- Firmware/lcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/lcd.cpp b/Firmware/lcd.cpp index 024f973f..bee20749 100644 --- a/Firmware/lcd.cpp +++ b/Firmware/lcd.cpp @@ -331,7 +331,7 @@ void lcd_no_autoscroll(void) void lcd_set_cursor(uint8_t col, uint8_t row) { - int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; + uint8_t row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; if (row >= LCD_HEIGHT) row = LCD_HEIGHT - 1; // we count rows starting w/0 lcd_currline = row; From a26651e7aa4e5061bd7b8407e33e8b984a06e0c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Thu, 19 Aug 2021 21:22:00 +0000 Subject: [PATCH 05/27] Change return types of two functions uint8_t These functions aren't used but they should return the appropriate type. --- Firmware/Sd2Card.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Sd2Card.h b/Firmware/Sd2Card.h index 6fb700e7..ae78f6d7 100644 --- a/Firmware/Sd2Card.h +++ b/Firmware/Sd2Card.h @@ -160,9 +160,9 @@ class Sd2Card { /** * \return error code for last error. See Sd2Card.h for a list of error codes. */ - int errorCode() const {return errorCode_;} + uint8_t errorCode() const {return errorCode_;} /** \return error data for last error. */ - int errorData() const {return status_;} + uint8_t errorData() const {return status_;} /** * Initialize an SD flash memory card with default clock rate and chip * select pin. See sd2Card::init(uint8_t sckRateID). From 77cce1fc05a5837063fd472d55b2b5975802778c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 21 Aug 2021 20:30:22 +0000 Subject: [PATCH 06/27] Replace three lines by one function call which does the same thing Saves 42 bytes of flash memory --- Firmware/menu.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index fe58686c..32efbcd0 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -152,9 +152,7 @@ void menu_submenu_no_reset(menu_func_t submenu) uint8_t menu_item_ret(void) { - lcd_beeper_quick_feedback(); - lcd_draw_update = 2; - lcd_button_pressed = false; + lcd_quick_feedback(); return 1; } From 66782e9c9dc21ced6ccfaec5c904a3ce09e76917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Wed, 25 Aug 2021 12:17:54 +0000 Subject: [PATCH 07/27] setTargetHotend expect an uint8_t, not int for second parameter also change _usb_timer to ShortTimer Saves 28 bytes of Flash and 1 byte of SRAM --- Firmware/Marlin_main.cpp | 6 +++--- Firmware/temperature.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index e669c58a..23fbc128 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -364,7 +364,7 @@ static unsigned long safetytimer_inactive_time = DEFAULT_SAFETYTIMER_TIME_MINS*6 unsigned long starttime=0; unsigned long stoptime=0; -unsigned long _usb_timer = 0; +ShortTimer _usb_timer; bool Stopped=false; @@ -1894,11 +1894,11 @@ void loop() { KEEPALIVE_STATE(NOT_BUSY); - if ((usb_printing_counter > 0) && ((_millis()-_usb_timer) > 1000)) + if ((usb_printing_counter > 0) && _usb_timer.expired(1000)) { is_usb_printing = true; usb_printing_counter--; - _usb_timer = _millis(); + _usb_timer.start(); // reset timer } if (usb_printing_counter == 0) { diff --git a/Firmware/temperature.h b/Firmware/temperature.h index 2941e630..f03ea620 100755 --- a/Firmware/temperature.h +++ b/Firmware/temperature.h @@ -168,7 +168,7 @@ static inline void setTargetHotendSafe(const float &celsius, uint8_t extruder) // Doesn't save FLASH when not inlined. static inline void setAllTargetHotends(const float &celsius) { - for(int i=0;i Date: Thu, 26 Aug 2021 17:17:16 +0000 Subject: [PATCH 08/27] Convert mmu_last_request and mmu_last_response to ShortTimer Saves 180 bytes of flash and 2 byte of SRAM --- Firmware/mmu.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 89aeea3e..0a2df3e9 100755 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -76,8 +76,8 @@ int16_t mmu_version = -1; int16_t mmu_buildnr = -1; -uint32_t mmu_last_request = 0; -uint32_t mmu_last_response = 0; +ShortTimer mmu_last_request; +ShortTimer mmu_last_response; MmuCmd mmu_last_cmd = MmuCmd::None; uint16_t mmu_power_failures = 0; @@ -113,7 +113,7 @@ int mmu_puts_P(const char* str) { mmu_clr_rx_buf(); //clear rx buffer int r = fputs_P(str, uart2io); //send command - mmu_last_request = _millis(); + mmu_last_request.start(); return r; } @@ -125,7 +125,7 @@ int mmu_printf_P(const char* format, ...) mmu_clr_rx_buf(); //clear rx buffer int r = vfprintf_P(uart2io, format, args); //send command va_end(args); - mmu_last_request = _millis(); + mmu_last_request.start(); return r; } @@ -133,7 +133,7 @@ int mmu_printf_P(const char* format, ...) int8_t mmu_rx_ok(void) { int8_t res = uart2_rx_str_P(PSTR("ok\n")); - if (res == 1) mmu_last_response = _millis(); + if (res == 1) mmu_last_response.start(); return res; } @@ -141,7 +141,7 @@ int8_t mmu_rx_ok(void) int8_t mmu_rx_start(void) { int8_t res = uart2_rx_str_P(PSTR("start\n")); - if (res == 1) mmu_last_response = _millis(); + if (res == 1) mmu_last_response.start(); return res; } @@ -350,7 +350,7 @@ void mmu_loop(void) mmu_printf_P(PSTR("M%d\n"), SilentModeMenu_MMU); mmu_state = S::SwitchMode; } - else if ((mmu_last_response + 300) < _millis()) //request every 300ms + else if (mmu_last_response.expired(300)) //request every 300ms { #ifndef IR_SENSOR if(check_for_ir_sensor()) ir_sensor_detected = true; @@ -398,7 +398,7 @@ void mmu_loop(void) if (mmu_cmd == MmuCmd::None) mmu_ready = true; } - else if ((mmu_last_request + MMU_P0_TIMEOUT) < _millis()) + else if (mmu_last_request.expired(MMU_P0_TIMEOUT)) { //resend request after timeout (30s) mmu_state = S::Idle; } @@ -424,7 +424,7 @@ void mmu_loop(void) mmu_ready = true; mmu_state = S::Idle; } - else if ((mmu_last_request + MMU_CMD_TIMEOUT) < _millis()) + else if (mmu_last_request.expired(MMU_CMD_TIMEOUT)) { //resend request after timeout (5 min) if (mmu_last_cmd != MmuCmd::None) { @@ -467,7 +467,7 @@ void mmu_loop(void) mmu_ready = true; mmu_state = S::Idle; } - else if ((mmu_last_request + MMU_CMD_TIMEOUT) < _millis()) + else if (mmu_last_request.expired(MMU_CMD_TIMEOUT)) { //timeout 45 s mmu_state = S::Idle; } @@ -479,7 +479,7 @@ void mmu_loop(void) eeprom_update_byte((uint8_t*)EEPROM_MMU_STEALTH, SilentModeMenu_MMU); mmu_state = S::Idle; } - else if ((mmu_last_request + MMU_CMD_TIMEOUT) < _millis()) + else if (mmu_last_request.expired(MMU_CMD_TIMEOUT)) { //timeout 45 s mmu_state = S::Idle; } From 762a5db125c73ebaedb873af10014371c4393372 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Thu, 26 Aug 2021 17:36:07 +0000 Subject: [PATCH 09/27] Convert previous_millis_cmd to LongTimer Saves 196 bytes of Flash but adds 1 byte of SRAM --- Firmware/Marlin_main.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 23fbc128..115e4aa3 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -357,7 +357,7 @@ const int8_t sensitive_pins[] PROGMEM = SENSITIVE_PINS; // Sensitive pin list fo //static float bt = 0; //Inactivity shutdown variables -static unsigned long previous_millis_cmd = 0; +static LongTimer previous_millis_cmd; unsigned long max_inactive_time = 0; static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l; static unsigned long safetytimer_inactive_time = DEFAULT_SAFETYTIMER_TIME_MINS*60*1000ul; @@ -2060,7 +2060,7 @@ static int setup_for_endstop_move(bool enable_endstops_now = true) { saved_feedrate = feedrate; int l_feedmultiply = feedmultiply; feedmultiply = 100; - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); enable_endstops(enable_endstops_now); return l_feedmultiply; @@ -2074,7 +2074,7 @@ static void clean_up_after_endstop_move(int original_feedmultiply) { feedrate = saved_feedrate; feedmultiply = original_feedmultiply; - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); } @@ -2518,7 +2518,7 @@ void home_xy() void refresh_cmd_timeout(void) { - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); } #ifdef FWRETRACT @@ -2823,7 +2823,7 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon saved_feedrate = feedrate; int l_feedmultiply = feedmultiply; feedmultiply = 100; - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); enable_endstops(true); @@ -3006,7 +3006,7 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon feedrate = saved_feedrate; feedmultiply = l_feedmultiply; - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); endstops_hit_on_purpose(); #ifndef MESH_BED_LEVELING //-// Oct 2019 :: this part of code is (from) now probably un-compilable @@ -4359,7 +4359,7 @@ void process_commands() } lcd_ignore_click(); //call lcd_ignore_click also for else ??? st_synchronize(); - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); if (codenum > 0 ) { codenum += _millis(); // keep track of when we started waiting KEEPALIVE_STATE(PAUSED_FOR_USER); @@ -4987,7 +4987,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) if(codenum != 0) LCD_MESSAGERPGM(_n("Sleep..."));////MSG_DWELL st_synchronize(); codenum += _millis(); // keep track of when we started waiting - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); while(_millis() < codenum) { manage_heater(); manage_inactivity(); @@ -6722,7 +6722,7 @@ Sigma_Exit: if (farm_mode) { prusa_statistics(2); }; //starttime=_millis(); - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); } break; @@ -6786,7 +6786,7 @@ Sigma_Exit: KEEPALIVE_STATE(IN_HANDLER); heating_status = 4; - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); } #endif break; @@ -9565,7 +9565,7 @@ void FlushSerialRequestResend() // Execution of a command from a SD card will not be confirmed. void ClearToSend() { - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); if (buflen && ((CMDBUFFER_CURRENT_TYPE == CMDBUFFER_CURRENT_TYPE_USB) || (CMDBUFFER_CURRENT_TYPE == CMDBUFFER_CURRENT_TYPE_USB_WITH_LINENR))) SERIAL_PROTOCOLLNRPGM(MSG_OK); } @@ -9741,7 +9741,7 @@ void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const void prepare_move() { clamp_to_software_endstops(destination); - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); // Do not use feedmultiply for E or Z only moves if( (current_position[X_AXIS] == destination [X_AXIS]) && (current_position[Y_AXIS] == destination [Y_AXIS])) { @@ -9769,7 +9769,7 @@ void prepare_arc_move(char isclockwise) { // in any intermediate location. set_current_to_destination(); - previous_millis_cmd = _millis(); + previous_millis_cmd.start(); } #if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1 @@ -10026,11 +10026,11 @@ if(0) get_command(); } - if( (_millis() - previous_millis_cmd) > max_inactive_time ) + if(previous_millis_cmd.expired(max_inactive_time)) if(max_inactive_time) kill(_n("Inactivity Shutdown"), 4); if(stepper_inactive_time) { - if( (_millis() - previous_millis_cmd) > stepper_inactive_time ) + if(previous_millis_cmd.expired(stepper_inactive_time)) { if(blocks_queued() == false && ignore_stepper_queue == false) { disable_x(); @@ -10077,7 +10077,7 @@ if(0) controllerFan(); //Check if fan should be turned on to cool stepper drivers down #endif #ifdef EXTRUDER_RUNOUT_PREVENT - if( (_millis() - previous_millis_cmd) > EXTRUDER_RUNOUT_SECONDS*1000 ) + if(previous_millis_cmd.expired(EXTRUDER_RUNOUT_SECONDS*1000)) if(degHotend(active_extruder)>EXTRUDER_RUNOUT_MINTEMP) { bool oldstatus=READ(E0_ENABLE_PIN); @@ -10090,7 +10090,7 @@ if(0) current_position[E_AXIS]=oldepos; destination[E_AXIS]=oldedes; plan_set_e_position(oldepos); - previous_millis_cmd=_millis(); + previous_millis_cmd.start(); st_synchronize(); WRITE(E0_ENABLE_PIN,oldstatus); } From a1abd094dd398d627d6a3bc35edd1825e62c840a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Thu, 26 Aug 2021 20:49:19 +0000 Subject: [PATCH 10/27] Convert autostart_atmillis to ShortTimer Saves 34 bytes of flash and 1 byte of SRAM --- Firmware/cardreader.cpp | 5 ++--- Firmware/cardreader.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index d4fd92ed..c23559c9 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -25,7 +25,6 @@ CardReader::CardReader() cardOK = false; saving = false; logging = false; - autostart_atmillis=0; workDirDepth = 0; file_subcall_ctr=0; memset(workDirParents, 0, sizeof(workDirParents)); @@ -39,7 +38,7 @@ CardReader::CardReader() WRITE(SDPOWER,HIGH); #endif //SDPOWER - autostart_atmillis=_millis()+5000; + autostart_atmillis.start(); // reset timer } char *createFilename(char *buffer,const dir_t &p) //buffer>12characters @@ -619,7 +618,7 @@ void CardReader::checkautostart(bool force) { if(!autostart_stilltocheck) return; - if(autostart_atmillis<_millis()) + if(autostart_atmillis.expired(5000)) return; } autostart_stilltocheck=false; diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h index 32a02452..d13caa08 100644 --- a/Firmware/cardreader.h +++ b/Firmware/cardreader.h @@ -130,7 +130,7 @@ private: char filenames[SD_PROCEDURE_DEPTH][MAXPATHNAMELENGTH]; uint32_t filesize; //int16_t n; - unsigned long autostart_atmillis; + ShortTimer autostart_atmillis; uint32_t sdpos ; bool autostart_stilltocheck; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware. From 37fd9d1b119f83b4b2552e8b59de83757c682595 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Thu, 26 Aug 2021 20:56:45 +0000 Subject: [PATCH 11/27] Convert NcTime to ShortTimer The variable is only used in ultralcd.cpp so I made it static there and deleted it from Marlin_main.cpp Saves 24 bytes of flash and 1 byte of SRAM --- Firmware/Marlin.h | 1 - Firmware/Marlin_main.cpp | 1 - Firmware/ultralcd.cpp | 6 +++--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index e6c5685d..e3b3fa39 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -330,7 +330,6 @@ extern unsigned int status_number; extern unsigned int heating_status_counter; extern char snmm_filaments_used; extern unsigned long PingTime; -extern unsigned long NcTime; extern bool no_response; extern uint8_t important_status; extern uint8_t saved_filament_type; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 115e4aa3..ac28ec08 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -161,7 +161,6 @@ CardReader card; #endif unsigned long PingTime = _millis(); -unsigned long NcTime; uint8_t mbl_z_probe_nr = 3; //numer of Z measurements for each point in mesh bed leveling calibration diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 669cdd71..2cfa73ad 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -55,7 +55,7 @@ int clock_interval = 0; - +static ShortTimer NcTime; static void lcd_sd_updir(); static void lcd_mesh_bed_leveling_settings(); #ifdef LCD_BL_PIN @@ -8705,10 +8705,10 @@ void lcd_printer_connected() { } static void lcd_send_status() { - if (farm_mode && no_response && ((_millis() - NcTime) > (NC_TIME * 1000))) { + if (farm_mode && no_response && (NcTime.expired(NC_TIME * 1000))) { //send important status messages periodicaly prusa_statistics(important_status, saved_filament_type); - NcTime = _millis(); + NcTime.start(); #ifdef FARM_CONNECT_MESSAGE lcd_connect_printer(); #endif //FARM_CONNECT_MESSAGE From 802b8860c862f1e8cca82146ab70c0a0cadf2629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Thu, 26 Aug 2021 21:04:48 +0000 Subject: [PATCH 12/27] Convert mmu_last_finda_response to ShortTimer Saves 48 bytes of Flash, 1 byte of SRAM --- Firmware/mmu.cpp | 6 +++--- Firmware/mmu.h | 3 ++- Firmware/ultralcd.cpp | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 0a2df3e9..0d6ebe4c 100755 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -70,7 +70,6 @@ uint8_t mmu_extruder = MMU_FILAMENT_UNKNOWN; uint8_t tmp_extruder = MMU_FILAMENT_UNKNOWN; int8_t mmu_finda = -1; -uint32_t mmu_last_finda_response = 0; int16_t mmu_version = -1; @@ -78,6 +77,7 @@ int16_t mmu_buildnr = -1; ShortTimer mmu_last_request; ShortTimer mmu_last_response; +ShortTimer mmu_last_finda_response; MmuCmd mmu_last_cmd = MmuCmd::None; uint16_t mmu_power_failures = 0; @@ -265,7 +265,7 @@ void mmu_loop(void) if (mmu_rx_ok() > 0) { fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer - mmu_last_finda_response = _millis(); + mmu_last_finda_response.start(); FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda); puts_P(PSTR("MMU - ENABLED")); mmu_enabled = true; @@ -378,7 +378,7 @@ void mmu_loop(void) if (mmu_rx_ok() > 0) { fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer - mmu_last_finda_response = _millis(); + mmu_last_finda_response.start(); FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda); //printf_P(PSTR("Eact: %d\n"), int(e_active())); if (!mmu_finda && CHECK_FSENSOR && fsensor_enabled) { diff --git a/Firmware/mmu.h b/Firmware/mmu.h index 30b8e1af..40a6dc72 100644 --- a/Firmware/mmu.h +++ b/Firmware/mmu.h @@ -4,6 +4,7 @@ #define MMU_H #include +#include "Timer.h" extern bool mmu_enabled; @@ -14,7 +15,7 @@ extern uint8_t mmu_extruder; extern uint8_t tmp_extruder; extern int8_t mmu_finda; -extern uint32_t mmu_last_finda_response; +extern ShortTimer mmu_last_finda_response; extern bool ir_sensor_detected; extern int16_t mmu_version; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 2cfa73ad..19961b44 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3839,7 +3839,7 @@ static void lcd_show_sensors_state() uint8_t idler_state = STATE_NA; pinda_state = READ(Z_MIN_PIN); - if (mmu_enabled && ((_millis() - mmu_last_finda_response) < 1000ul) ) + if (mmu_enabled && mmu_last_finda_response.expired(1000)) { finda_state = mmu_finda; } From 6a9bab02f794575c1c0449de8d71651e36b7f221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Thu, 26 Aug 2021 21:18:55 +0000 Subject: [PATCH 13/27] Convert display_time to ShortTimer Saves 24 bytes of flash, 1 byte of SRAM --- Firmware/ultralcd.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 19961b44..8a27dbca 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -87,7 +87,7 @@ int farm_timer = 8; uint8_t farm_status = 0; bool printer_connected = true; -unsigned long display_time; //just timer for showing pid finished message on lcd; +static ShortTimer display_time; //just timer for showing pid finished message on lcd; float pid_temp = DEFAULT_PID_TEMP; static bool forceMenuExpire = false; @@ -1344,10 +1344,10 @@ void lcd_commands() else { SERIAL_ECHOPGM("Invalid PID cal. results. Not stored to EEPROM."); } - display_time = _millis(); + display_time.start(); lcd_commands_step = 1; } - if ((lcd_commands_step == 1) && ((_millis()- display_time)>2000)) { //calibration finished message + if ((lcd_commands_step == 1) && display_time.expired(2000)) { //calibration finished message lcd_setstatuspgm(_T(WELCOME_MSG)); custom_message_type = CustomMsg::Status; pid_temp = DEFAULT_PID_TEMP; From ef8083a1485545cb6bd351939eb8213ee12b6da4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Fri, 27 Aug 2021 08:10:18 +0000 Subject: [PATCH 14/27] crashDetTimer can be ShortTimer Expired value is less than 65535 Saves 8 bytes of flash and 2 bytes of SRAM --- Firmware/Marlin_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index ac28ec08..259baaa9 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -205,7 +205,7 @@ unsigned long pause_time = 0; unsigned long start_pause_print = _millis(); unsigned long t_fan_rising_edge = _millis(); LongTimer safetyTimer; -static LongTimer crashDetTimer; +static ShortTimer crashDetTimer; //unsigned long load_filament_time; From 42778cae832e5b192ca693b621c5e4aeabe549ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Fri, 27 Aug 2021 08:34:22 +0000 Subject: [PATCH 15/27] Remove unused kicktime timer The variable is only set and never actually used Saves 8 bytes of flash and 4 bytes of SRAM --- Firmware/Marlin.h | 3 --- Firmware/Marlin_main.cpp | 4 ---- 2 files changed, 7 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index e3b3fa39..ac5da8d5 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -320,9 +320,6 @@ extern bool is_usb_printing; extern bool homing_flag; extern bool loading_flag; extern unsigned int usb_printing_counter; - -extern unsigned long kicktime; - extern unsigned long total_filament_used; void save_statistics(unsigned long _total_filament_used, unsigned long _total_print_time); extern unsigned int heating_status; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 259baaa9..138a490c 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -195,8 +195,6 @@ int bowden_length[4] = {385, 385, 385, 385}; bool is_usb_printing = false; bool homing_flag = false; -unsigned long kicktime = _millis()+100000; - unsigned int usb_printing_counter; int8_t lcd_change_fil_state = 0; @@ -4601,8 +4599,6 @@ void process_commands() eeprom_update_word(reinterpret_cast(&(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset)),0); } else if(code_seen_P(PSTR("Beat"))) { // PRUSA Beat - // Kick farm link timer - kicktime = _millis(); } else if(code_seen_P(PSTR("FR"))) { // PRUSA FR // Factory full reset From aa0a86bf13d1f8ee7da72262b05f2d1474ffb5f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Fri, 27 Aug 2021 09:01:09 +0000 Subject: [PATCH 16/27] Remove internal Prusa command 'Beat' It doesn't seem to do anything. Saves 22 bytes of flash --- Firmware/Marlin_main.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 138a490c..50dcced5 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -4490,7 +4490,7 @@ void process_commands() Set of internal PRUSA commands #### Usage - PRUSA [ Ping | PRN | FAN | fn | thx | uvlo | MMURES | RESET | fv | M28 | SN | Fir | Rev | Lang | Lz | Beat | FR ] + PRUSA [ Ping | PRN | FAN | fn | thx | uvlo | MMURES | RESET | fv | M28 | SN | Fir | Rev | Lang | Lz | FR ] #### Parameters - `Ping` @@ -4508,7 +4508,6 @@ void process_commands() - `Rev`- Prints filament size, elelectronics, nozzle type - `Lang` - Reset the language - `Lz` - - `Beat` - Kick farm link timer - `FR` - Full factory reset - `nozzle set ` - set nozzle diameter (farm mode only), e.g. `PRUSA nozzle set 0.4` - `nozzle D` - check the nozzle diameter (farm mode only), works like M862.1 P, e.g. `PRUSA nozzle D0.4` @@ -4598,8 +4597,6 @@ void process_commands() } else if(code_seen_P(PSTR("Lz"))) { // PRUSA Lz eeprom_update_word(reinterpret_cast(&(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset)),0); - } else if(code_seen_P(PSTR("Beat"))) { // PRUSA Beat - } else if(code_seen_P(PSTR("FR"))) { // PRUSA FR // Factory full reset factory_reset(0); From 2d614a8d41893145dc5e1ded4e59c36de66e04e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 28 Aug 2021 16:52:30 +0000 Subject: [PATCH 17/27] Change usb_printing_counter to uint8_t It is assigned max value of 10 Saves 26 byte of flash and 1 byte of SRAM --- Firmware/Marlin.h | 2 +- Firmware/Marlin_main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index ac5da8d5..fc725721 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -319,7 +319,7 @@ extern int bowden_length[4]; extern bool is_usb_printing; extern bool homing_flag; extern bool loading_flag; -extern unsigned int usb_printing_counter; +extern uint8_t usb_printing_counter; extern unsigned long total_filament_used; void save_statistics(unsigned long _total_filament_used, unsigned long _total_print_time); extern unsigned int heating_status; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 50dcced5..4f8c88b3 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -195,7 +195,7 @@ int bowden_length[4] = {385, 385, 385, 385}; bool is_usb_printing = false; bool homing_flag = false; -unsigned int usb_printing_counter; +uint8_t usb_printing_counter; int8_t lcd_change_fil_state = 0; From 22f23dff36560a6b573ae6391b2d87554204ed59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 28 Aug 2021 17:00:24 +0000 Subject: [PATCH 18/27] Change heating_status to uint8_t Saves 66 byte of flash and 1 byte of SRAM --- Firmware/Marlin.h | 2 +- Firmware/Marlin_main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index fc725721..c5f8f259 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -322,7 +322,7 @@ extern bool loading_flag; extern uint8_t usb_printing_counter; extern unsigned long total_filament_used; void save_statistics(unsigned long _total_filament_used, unsigned long _total_print_time); -extern unsigned int heating_status; +extern uint8_t heating_status; extern unsigned int status_number; extern unsigned int heating_status_counter; extern char snmm_filaments_used; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 4f8c88b3..b90ae310 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -217,7 +217,7 @@ bool prusa_sd_card_upload = false; unsigned int status_number = 0; unsigned long total_filament_used; -unsigned int heating_status; +uint8_t heating_status; unsigned int heating_status_counter; bool loading_flag = false; From 60c96406028dc898fa772932a0da4305f2dd49d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 28 Aug 2021 17:02:26 +0000 Subject: [PATCH 19/27] Change heating_status_counter to uint8_t It has a max value of 14 Saves 28 bytes of flash and 1 byte of SRAM --- Firmware/Marlin.h | 2 +- Firmware/Marlin_main.cpp | 2 +- Firmware/ultralcd.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index c5f8f259..c62c72fe 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -324,7 +324,7 @@ extern unsigned long total_filament_used; void save_statistics(unsigned long _total_filament_used, unsigned long _total_print_time); extern uint8_t heating_status; extern unsigned int status_number; -extern unsigned int heating_status_counter; +extern uint8_t heating_status_counter; extern char snmm_filaments_used; extern unsigned long PingTime; extern bool no_response; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index b90ae310..7f7bf0a7 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -218,7 +218,7 @@ unsigned int status_number = 0; unsigned long total_filament_used; uint8_t heating_status; -unsigned int heating_status_counter; +uint8_t heating_status_counter; bool loading_flag = false; #define XY_NO_RESTORE_FLAG (mesh_bed_leveling_flag || homing_flag) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 8a27dbca..c72aa7bd 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -583,7 +583,7 @@ void lcdui_print_status_line(void) lcd_set_cursor(7, 3); lcd_space(13); - for (unsigned int dots = 0; dots < heating_status_counter; dots++) { + for (uint8_t dots = 0; dots < heating_status_counter; dots++) { lcd_putc_at(7 + dots, 3, '.'); } switch (heating_status) { From a687173e02b0a99b33f92951aaa1653f32b64c60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 28 Aug 2021 17:45:31 +0000 Subject: [PATCH 20/27] Change custom_message_state_old and custom_message_state to uint8_t I see max value as 7*7+10 = 59 Saves 100 byte of flash and 1 byte of SRAM --- Firmware/Marlin_main.cpp | 2 +- Firmware/ultralcd.cpp | 2 +- Firmware/ultralcd.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 7f7bf0a7..107e2467 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3118,7 +3118,7 @@ static void gcode_G80() #endif //PINDA_THERMISTOR // Save custom message state, set a new custom message state to display: Calibrating point 9. CustomMsg custom_message_type_old = custom_message_type; - unsigned int custom_message_state_old = custom_message_state; + uint8_t custom_message_state_old = custom_message_state; custom_message_type = CustomMsg::MeshBedLeveling; custom_message_state = (nMeasPoints * nMeasPoints) + 10; lcd_update(1); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index c72aa7bd..c455ca2f 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -78,7 +78,7 @@ LcdCommands lcd_commands_type = LcdCommands::Idle; static uint8_t lcd_commands_step = 0; CustomMsg custom_message_type = CustomMsg::Status; -unsigned int custom_message_state = 0; +uint8_t custom_message_state = 0; bool isPrintPaused = false; diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 06763556..ed04757e 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -121,7 +121,7 @@ enum class CustomMsg : uint_least8_t }; extern CustomMsg custom_message_type; -extern unsigned int custom_message_state; +extern uint8_t custom_message_state; extern uint8_t farm_mode; extern int farm_timer; From 2013295f9401d94faddb878938e221c6e80f10f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 28 Aug 2021 18:00:03 +0000 Subject: [PATCH 21/27] Change farm_timer to uint8_t Remove extern declaration of farm_timer and farm_status as they are only used in one file. Saves 26 bytes of flash --- Firmware/ultralcd.cpp | 3 +-- Firmware/ultralcd.h | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index c455ca2f..82a46a5d 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -80,10 +80,9 @@ static uint8_t lcd_commands_step = 0; CustomMsg custom_message_type = CustomMsg::Status; uint8_t custom_message_state = 0; - bool isPrintPaused = false; uint8_t farm_mode = 0; -int farm_timer = 8; +uint8_t farm_timer = 8; uint8_t farm_status = 0; bool printer_connected = true; diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index ed04757e..0ea53bd6 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -124,8 +124,6 @@ extern CustomMsg custom_message_type; extern uint8_t custom_message_state; extern uint8_t farm_mode; -extern int farm_timer; -extern uint8_t farm_status; extern bool UserECoolEnabled(); extern bool FarmOrUserECool(); From a940c364c9244ab1bf7ca269ff6001049bd72631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 28 Aug 2021 18:23:44 +0000 Subject: [PATCH 22/27] Create enum class for heating_status variable --- Firmware/Marlin.h | 12 +++++++++++- Firmware/Marlin_main.cpp | 14 +++++++------- Firmware/temperature.cpp | 4 ++-- Firmware/ultralcd.cpp | 16 ++++++++-------- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index c62c72fe..6797b954 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -275,6 +275,17 @@ FORCE_INLINE unsigned long millis_nc() { void setPwmFrequency(uint8_t pin, int val); #endif +enum class HeatingStatus : uint8_t +{ + NO_HEATING = 0, + EXTRUDER_HEATING = 1, + EXTRUDER_HEATING_COMPLETE = 2, + BED_HEATING = 3, + BED_HEATING_COMPLETE = 4, +}; + +extern HeatingStatus heating_status; + extern bool fans_check_enabled; extern float homing_feedrate[]; extern uint8_t axis_relative_modes; @@ -322,7 +333,6 @@ extern bool loading_flag; extern uint8_t usb_printing_counter; extern unsigned long total_filament_used; void save_statistics(unsigned long _total_filament_used, unsigned long _total_print_time); -extern uint8_t heating_status; extern unsigned int status_number; extern uint8_t heating_status_counter; extern char snmm_filaments_used; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 107e2467..868666d2 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -217,7 +217,7 @@ bool prusa_sd_card_upload = false; unsigned int status_number = 0; unsigned long total_filament_used; -uint8_t heating_status; +HeatingStatus heating_status; uint8_t heating_status_counter; bool loading_flag = false; @@ -6676,7 +6676,7 @@ Sigma_Exit: break; } LCD_MESSAGERPGM(_T(MSG_HEATING)); - heating_status = 1; + heating_status = HeatingStatus::EXTRUDER_HEATING; if (farm_mode) { prusa_statistics(1); }; #ifdef AUTOTEMP @@ -6710,7 +6710,7 @@ Sigma_Exit: LCD_MESSAGERPGM(_T(MSG_HEATING_COMPLETE)); KEEPALIVE_STATE(IN_HANDLER); - heating_status = 2; + heating_status = HeatingStatus::EXTRUDER_HEATING_COMPLETE; if (farm_mode) { prusa_statistics(2); }; //starttime=_millis(); @@ -6736,7 +6736,7 @@ Sigma_Exit: { bool CooldownNoWait = false; LCD_MESSAGERPGM(_T(MSG_BED_HEATING)); - heating_status = 3; + heating_status = HeatingStatus::BED_HEATING; if (farm_mode) { prusa_statistics(1); }; if (code_seen('S')) { @@ -6776,7 +6776,7 @@ Sigma_Exit: } LCD_MESSAGERPGM(_T(MSG_BED_DONE)); KEEPALIVE_STATE(IN_HANDLER); - heating_status = 4; + heating_status = HeatingStatus::BED_HEATING_COMPLETE; previous_millis_cmd.start(); } @@ -11798,9 +11798,9 @@ void restore_print_from_ram_and_continue(float e_move) if (degTargetHotend(saved_active_extruder) != saved_extruder_temperature) { setTargetHotendSafe(saved_extruder_temperature, saved_active_extruder); - heating_status = 1; + heating_status = HeatingStatus::EXTRUDER_HEATING; wait_for_heater(_millis(), saved_active_extruder); - heating_status = 2; + heating_status = HeatingStatus::EXTRUDER_HEATING_COMPLETE; } axis_relative_modes ^= (-saved_extruder_relative_mode ^ axis_relative_modes) & E_AXIS_MASK; float e = saved_pos[E_AXIS] - e_move; diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 7730be05..788d42ac 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -615,7 +615,7 @@ void fanSpeedError(unsigned char _fan) { if (get_message_level() != 0 && isPrintPaused) return; //to ensure that target temp. is not set to zero in case that we are resuming print if (card.sdprinting || is_usb_printing) { - if (heating_status != 0) { + if (heating_status != HeatingStatus::NO_HEATING) { lcd_print_stop(); } else { @@ -625,7 +625,7 @@ void fanSpeedError(unsigned char _fan) { else { // SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_PAUSED); //Why pause octoprint? is_usb_printing would be true in that case, so there is no need for this. setTargetHotend0(0); - heating_status = 0; + heating_status = HeatingStatus::NO_HEATING; fan_check_error = EFCE_REPORTED; } switch (_fan) { diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 82a46a5d..e075e778 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -457,7 +457,7 @@ void lcdui_print_percent_done(void) const char* src = is_usb_printing?_N("USB"):(IS_SD_PRINTING?_N(" SD"):_N(" ")); char per[4]; bool num = IS_SD_PRINTING || (PRINTER_ACTIVE && (print_percent_done_normal != PRINT_PERCENT_DONE_INIT)); - if (!num || heating_status) // either not printing or heating + if (!num || heating_status != HeatingStatus::NO_HEATING) // either not printing or heating { const int8_t sheetNR = eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)); const int8_t nextSheet = eeprom_next_initialized_sheet(sheetNR); @@ -574,7 +574,7 @@ void lcdui_print_time(void) //! @Brief Print status line on status screen void lcdui_print_status_line(void) { - if (heating_status) { // If heating flag, show progress of heating + if (heating_status != HeatingStatus::NO_HEATING) { // If heating flag, show progress of heating heating_status_counter++; if (heating_status_counter > 13) { heating_status_counter = 0; @@ -586,20 +586,20 @@ void lcdui_print_status_line(void) lcd_putc_at(7 + dots, 3, '.'); } switch (heating_status) { - case 1: + case HeatingStatus::EXTRUDER_HEATING: lcd_puts_at_P(0, 3, _T(MSG_HEATING)); break; - case 2: + case HeatingStatus::EXTRUDER_HEATING_COMPLETE: lcd_puts_at_P(0, 3, _T(MSG_HEATING_COMPLETE)); - heating_status = 0; + heating_status = HeatingStatus::NO_HEATING; heating_status_counter = 0; break; - case 3: + case HeatingStatus::BED_HEATING: lcd_puts_at_P(0, 3, _T(MSG_BED_HEATING)); break; - case 4: + case HeatingStatus::BED_HEATING_COMPLETE: lcd_puts_at_P(0, 3, _T(MSG_BED_DONE)); - heating_status = 0; + heating_status = HeatingStatus::NO_HEATING; heating_status_counter = 0; break; default: From b835f31904ef1d4c56a603accfe87a0aa6f4ad1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sun, 5 Sep 2021 17:08:30 +0000 Subject: [PATCH 23/27] Remove variable move_menu_scale The variable is just set to 1.0 and is never modified, I also removed the function lcd_move_menu_1mm() Changes save 96 bytes of flash memory and 4 bytes of SRAM --- Firmware/ultralcd.cpp | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index e075e778..f9d36b88 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1384,8 +1384,6 @@ void lcd_pause_usb_print() SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_PAUSE); } - -float move_menu_scale; static void lcd_move_menu_axis(); @@ -2762,7 +2760,7 @@ static void _lcd_move(const char *name, uint8_t axis, int min, int max) refresh_cmd_timeout(); if (! planner_queue_full()) { - current_position[axis] += float((int)lcd_encoder) * move_menu_scale; + current_position[axis] += float((int)lcd_encoder); if (min_software_endstops && current_position[axis] < min) current_position[axis] = min; if (max_software_endstops && current_position[axis] > max) current_position[axis] = max; lcd_encoder = 0; @@ -2790,7 +2788,7 @@ void lcd_move_e() refresh_cmd_timeout(); if (! planner_queue_full()) { - current_position[E_AXIS] += float((int)lcd_encoder) * move_menu_scale; + current_position[E_AXIS] += float((int)lcd_encoder); lcd_encoder = 0; plan_buffer_line_curposXYZE(manual_feedrate[E_AXIS] / 60); lcd_draw_update = 1; @@ -4234,13 +4232,6 @@ void lcd_move_menu_axis() MENU_END(); } -static void lcd_move_menu_1mm() -{ - move_menu_scale = 1.0; - lcd_move_menu_axis(); -} - - void EEPROM_save(int pos, uint8_t* value, uint8_t size) { do @@ -5671,7 +5662,7 @@ static void lcd_settings_menu() if (!PRINTER_ACTIVE || isPrintPaused) { - MENU_ITEM_SUBMENU_P(_i("Move axis"), lcd_move_menu_1mm);////MSG_MOVE_AXIS c=18 + MENU_ITEM_SUBMENU_P(_i("Move axis"), lcd_move_menu_axis);////MSG_MOVE_AXIS c=18 MENU_ITEM_GCODE_P(_i("Disable steppers"), PSTR("M84"));////MSG_DISABLE_STEPPERS c=18 } @@ -8879,7 +8870,6 @@ void menu_lcd_longpress_func(void) #endif || menu_menu == lcd_support_menu ){ - move_menu_scale = 1.0; menu_submenu(lcd_move_z); } else { // otherwise consume the long press as normal click From 7787f17139380c0e3f238862712b3803d38391fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sun, 12 Sep 2021 15:03:34 +0000 Subject: [PATCH 24/27] Smaller code in G28 Replace two blocks of code with already defined functions. Change saves 100 bytes of flash memory and 11 lines of code. --- Firmware/Marlin_main.cpp | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 868666d2..06a6dbda 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2817,12 +2817,7 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon if (home_z) babystep_undo(); - saved_feedrate = feedrate; - int l_feedmultiply = feedmultiply; - feedmultiply = 100; - previous_millis_cmd.start(); - - enable_endstops(true); + int l_feedmultiply = setup_for_endstop_move(); set_destination_to_current(); feedrate = 0.0; @@ -2997,13 +2992,7 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon // contains the machine coordinates. plan_set_position_curposXYZE(); - #ifdef ENDSTOPS_ONLY_FOR_HOMING - enable_endstops(false); - #endif - - feedrate = saved_feedrate; - feedmultiply = l_feedmultiply; - previous_millis_cmd.start(); + clean_up_after_endstop_move(l_feedmultiply); endstops_hit_on_purpose(); #ifndef MESH_BED_LEVELING //-// Oct 2019 :: this part of code is (from) now probably un-compilable From 052ecc3782d6313fc522bd9d3d9a6f2806154651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sun, 12 Sep 2021 16:22:47 +0000 Subject: [PATCH 25/27] G81: Change for loop variables x and y to uint8_t Saves 198 bytes of flash, that's crazy --- Firmware/Marlin_main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 06a6dbda..4b8dd2d1 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -5625,8 +5625,8 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) SERIAL_PROTOCOLPGM("\nZ search height: "); SERIAL_PROTOCOL(MESH_HOME_Z_SEARCH); SERIAL_PROTOCOLLNPGM("\nMeasured points:"); - for (int y = MESH_NUM_Y_POINTS-1; y >= 0; y--) { - for (int x = 0; x < MESH_NUM_X_POINTS; x++) { + for (uint8_t y = MESH_NUM_Y_POINTS-1; y >= 0; y--) { + for (uint8_t x = 0; x < MESH_NUM_X_POINTS; x++) { SERIAL_PROTOCOLPGM(" "); SERIAL_PROTOCOL_F(mbl.z_values[y][x], 5); } From ac049c7e3c5c1bd0f627ed55897fd331c637fff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sun, 12 Sep 2021 16:42:31 +0000 Subject: [PATCH 26/27] Use code_value_short() in get_command() Same code but uses a defined function Saves 28 bytes of flash memory --- Firmware/cmdqueue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/cmdqueue.cpp b/Firmware/cmdqueue.cpp index 7cd0c463..fab0fe7d 100755 --- a/Firmware/cmdqueue.cpp +++ b/Firmware/cmdqueue.cpp @@ -443,7 +443,7 @@ void get_command() char *p = cmdbuffer+bufindw+CMDHDRSIZE; while (p != strchr_pointer) checksum = checksum^(*p++); - if (int(strtol(strchr_pointer+1, NULL, 10)) != int(checksum)) { + if (code_value_short() != (int16_t)checksum) { SERIAL_ERROR_START; SERIAL_ERRORRPGM(_n("checksum mismatch, Last Line: "));////MSG_ERR_CHECKSUM_MISMATCH SERIAL_ERRORLN(gcode_LastN); From d8723c0eac7c186199fff02ba9b4c4552d0b68e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sun, 12 Sep 2021 16:47:03 +0000 Subject: [PATCH 27/27] Use code_value_uint8() in get_command() The if statement is simplified as the value is never negative and we can get rid of one variable Saves 12 bytes of flash memory --- Firmware/cmdqueue.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Firmware/cmdqueue.cpp b/Firmware/cmdqueue.cpp index fab0fe7d..a48fcdb5 100755 --- a/Firmware/cmdqueue.cpp +++ b/Firmware/cmdqueue.cpp @@ -486,8 +486,7 @@ void get_command() is_usb_printing = true; } if (Stopped == true) { - int gcode = strtol(strchr_pointer+1, NULL, 10); - if (gcode >= 0 && gcode <= 3) { + if (code_value_uint8() <= 3) { SERIAL_ERRORLNRPGM(MSG_ERR_STOPPED); LCD_MESSAGERPGM(_T(MSG_STOPPED)); }