From 5c0e0142157e9f29628650c71800baeb6cbffa57 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Tue, 9 Apr 2024 18:42:03 +0200 Subject: [PATCH 1/3] Add max acceleration mm per s2, feedrates and jerk save and restor during power panic Thanks to @wavexx in #2456 --- Firmware/eeprom.h | 20 +++++++++++-- Firmware/power_panic.cpp | 61 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 76 insertions(+), 5 deletions(-) diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index bdd2013fd..63da5ff9d 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -385,6 +385,15 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP | 0x0C7F 3199 | bool | EEPROM_UVLO_Z_LIFTED | 00h 0 | 00h | Power Panic Z axis NOT lifted | Power Panic | D3 Ax0c7f C1 | ^ | ^ | ^ | 01h 1 | 01h | Power Panic Z axis lifted | ^ | ^ | 0x0C7d 3197 | uint16 | EEPROM_UVLO_EXTRUDE_MINTEMP | 0-305 | afh 175 | Power Panic Extrude mintemp | Power Panic | D3 Ax0c7d C2 +| 0x0C6D 3181 | float*4 | EEPROM_UVLO_ACCELL_MM_S2_NORMAL | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 normal | Power Panic | D3 Ax0c6d C16 +| 0x0C5D 3165 | float*4 | EEPROM_UVLO_ACCELL_MM_S2_SILENT | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 silent | Power Panic | D3 Ax0c5d C16 +| 0x0C4D 3149 | float*4 | EEPROM_UVLO_MAX_FEEDRATE_NORMAL | ??? | ff ff ff ffh | Power Panic max feedrate normal | Power Panic | D3 Ax0c4d C16 +| 0x0C3D 3133 | float*4 | EEPROM_UVLO_MAX_FEEDRATE_SILENT | ??? | ff ff ff ffh | Power Panic max feedrate silent | Power Panic | D3 Ax0c3d C16 +| 0x0C39 3129 | float | EEPROM_UVLO_MIN_FEEDRATE | ??? | ff ff ff ffh | Power Panic min feedrate | Power Panic | D3 Ax0c39 C4 +| 0x0C35 3125 | float | EEPROM_UVLO_MIN_TRAVEL_FEEDRATE | ??? | ff ff ff ffh | Power Panic min travel feedrate | Power Panic | D3 Ax0c35 C4 +| 0x0C31 3121 | uint32 | EEPROM_UVLO_MIN_SEGMENT_TIME_US | ??? | ff ff ff ffh | Power Panic min segment time us | Power Panic | D3 Ax0c31 C4 +| 0x0C21 3105 | float*4 | EEPROM_UVLO_MAX_JERK | ??? | ff ff ff ffh | Power Panic max jerk | Power Panic | D3 Ax0c21 C16 + |Address begin|Bit/Type | Name | Valid values | Default/FactoryReset | Description |Gcode/Function| Debug code | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: @@ -626,9 +635,16 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE); #define EEPROM_CUSTOM_MENDEL_NAME (EEPROM_FILENAME_EXTENSION-17) //char[17] #define EEPROM_UVLO_Z_LIFTED (EEPROM_CUSTOM_MENDEL_NAME-1) //bool #define EEPROM_UVLO_EXTRUDE_MINTEMP (EEPROM_UVLO_Z_LIFTED-2) //uint16_t - +#define EEPROM_UVLO_ACCELL_MM_S2_NORMAL (EEPROM_UVLO_EXTRUDE_MINTEMP-4*4) // 4 x float +#define EEPROM_UVLO_ACCELL_MM_S2_SILENT (EEPROM_UVLO_ACCELL_MM_S2_NORMAL-4*4) // 4 x float +#define EEPROM_UVLO_MAX_FEEDRATE_NORMAL (EEPROM_UVLO_ACCELL_MM_S2_SILENT-4*4) // 4 x float +#define EEPROM_UVLO_MAX_FEEDRATE_SILENT (EEPROM_UVLO_MAX_FEEDRATE_NORMAL-4*4) // 4 x float +#define EEPROM_UVLO_MIN_FEEDRATE (EEPROM_UVLO_MAX_FEEDRATE_SILENT-4) //float +#define EEPROM_UVLO_MIN_TRAVEL_FEEDRATE (EEPROM_UVLO_MIN_FEEDRATE-4) //float +#define EEPROM_UVLO_MIN_SEGMENT_TIME_US (EEPROM_UVLO_MIN_TRAVEL_FEEDRATE-4) //unit32_t +#define EEPROM_UVLO_MAX_JERK (EEPROM_UVLO_MIN_SEGMENT_TIME_US-4*4) // 4 x float //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. -#define EEPROM_LAST_ITEM EEPROM_UVLO_EXTRUDE_MINTEMP +#define EEPROM_LAST_ITEM EEPROM_UVLO_MAX_JERK // !!!!! // !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!! // !!!!! diff --git a/Firmware/power_panic.cpp b/Firmware/power_panic.cpp index 6201a9bee..9d6ad7240 100644 --- a/Firmware/power_panic.cpp +++ b/Firmware/power_panic.cpp @@ -191,13 +191,41 @@ void uvlo_() { eeprom_update_float_notify((float*)(EEPROM_UVLO_LA_K), extruder_advance_K); #endif +#ifdef PREVENT_DANGEROUS_EXTRUDE + // Save min extrude temp + eeprom_update_word_notify((uint16_t*)EEPROM_UVLO_EXTRUDE_MINTEMP, extrude_min_temp); +#endif //PREVENT_DANGEROUS_EXTRUDE + // Save max acceleration mm per s2 + eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 0), cs.max_acceleration_mm_per_s2_normal[X_AXIS]); + eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 4), cs.max_acceleration_mm_per_s2_normal[Y_AXIS]); + eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 8), cs.max_acceleration_mm_per_s2_normal[Z_AXIS]); + eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL +12), cs.max_acceleration_mm_per_s2_normal[E_AXIS]); + eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 0), cs.max_acceleration_mm_per_s2_silent[X_AXIS]); + eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 4), cs.max_acceleration_mm_per_s2_silent[Y_AXIS]); + eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 8), cs.max_acceleration_mm_per_s2_silent[Z_AXIS]); + eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT +12), cs.max_acceleration_mm_per_s2_silent[E_AXIS]); + // Save feedrates + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 0), cs.max_feedrate_normal[X_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 4), cs.max_feedrate_normal[Y_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 8), cs.max_feedrate_normal[Z_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL +12), cs.max_feedrate_normal[E_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 0), cs.max_feedrate_silent[X_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 4), cs.max_feedrate_silent[Y_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 8), cs.max_feedrate_silent[Z_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT +12), cs.max_feedrate_silent[E_AXIS]); + // Save Jerk + eeprom_update_float_notify((float *)(EEPROM_UVLO_MIN_FEEDRATE), cs.minimumfeedrate); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MIN_TRAVEL_FEEDRATE), cs.mintravelfeedrate); + eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_MIN_SEGMENT_TIME_US), cs.min_segment_time_us); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_JERK + 0), cs.max_jerk[X_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_JERK + 4), cs.max_jerk[Y_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_JERK + 8), cs.max_jerk[Z_AXIS]); + eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_JERK +12), cs.max_jerk[E_AXIS]); // Finally store the "power outage" flag. if (did_pause_print) { eeprom_update_byte_notify((uint8_t*)EEPROM_UVLO_Z_LIFTED, 1); } -#ifdef PREVENT_DANGEROUS_EXTRUDE - eeprom_update_word_notify((uint16_t*)EEPROM_UVLO_EXTRUDE_MINTEMP, extrude_min_temp); -#endif //PREVENT_DANGEROUS_EXTRUDE + eeprom_update_byte_notify((uint8_t*)EEPROM_UVLO, PowerPanic::PENDING_RECOVERY); // Increment power failure counter @@ -426,8 +454,35 @@ bool recover_machine_state_after_power_panic() { #endif #ifdef PREVENT_DANGEROUS_EXTRUDE + // Recover min extrude temp extrude_min_temp = eeprom_read_word((uint16_t*)EEPROM_UVLO_EXTRUDE_MINTEMP); #endif //PREVENT_DANGEROUS_EXTRUDE + // Recover max acceleration mm per s2 + cs.max_acceleration_mm_per_s2_normal[X_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 0)); + cs.max_acceleration_mm_per_s2_normal[Y_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 4)); + cs.max_acceleration_mm_per_s2_normal[Z_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 8)); + cs.max_acceleration_mm_per_s2_normal[E_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL +12)); + cs.max_acceleration_mm_per_s2_silent[X_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 0)); + cs.max_acceleration_mm_per_s2_silent[Y_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 4)); + cs.max_acceleration_mm_per_s2_silent[Z_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 8)); + cs.max_acceleration_mm_per_s2_silent[E_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT +12)); + // Recover feedrates + cs.max_feedrate_normal[X_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 0)); + cs.max_feedrate_normal[Y_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 4)); + cs.max_feedrate_normal[Z_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 8)); + cs.max_feedrate_normal[E_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL +12)); + cs.max_feedrate_silent[X_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 0)); + cs.max_feedrate_silent[Y_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 4)); + cs.max_feedrate_silent[Z_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 8)); + cs.max_feedrate_silent[E_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT +12)); + // Recover jerk + cs.minimumfeedrate = eeprom_read_float((float *)EEPROM_UVLO_MIN_FEEDRATE); + cs.mintravelfeedrate = eeprom_read_float((float *)EEPROM_UVLO_MIN_TRAVEL_FEEDRATE); + cs.min_segment_time_us = eeprom_read_dword((uint32_t *)EEPROM_UVLO_MIN_SEGMENT_TIME_US); + cs.max_jerk[X_AXIS] = eeprom_read_float((float *)EEPROM_UVLO_MAX_JERK + 0); + cs.max_jerk[Y_AXIS] = eeprom_read_float((float *)EEPROM_UVLO_MAX_JERK + 4); + cs.max_jerk[Z_AXIS] = eeprom_read_float((float *)EEPROM_UVLO_MAX_JERK + 8); + cs.max_jerk[E_AXIS] = eeprom_read_float((float *)EEPROM_UVLO_MAX_JERK +12); return mbl_was_active; } From f50e754f265ce8964f8dc5102e9020cc129fb286 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Wed, 10 Apr 2024 09:24:33 +0200 Subject: [PATCH 2/3] Use of `eeprom_update_block_notify` and `eeprom_read_block` reduces the flash usage a lot. Thanks to @gudnimg --- Firmware/eeprom.h | 30 ++++++++++++++++++++---- Firmware/power_panic.cpp | 50 ++++++++-------------------------------- 2 files changed, 35 insertions(+), 45 deletions(-) diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 63da5ff9d..09d8108a0 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -385,14 +385,34 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP | 0x0C7F 3199 | bool | EEPROM_UVLO_Z_LIFTED | 00h 0 | 00h | Power Panic Z axis NOT lifted | Power Panic | D3 Ax0c7f C1 | ^ | ^ | ^ | 01h 1 | 01h | Power Panic Z axis lifted | ^ | ^ | 0x0C7d 3197 | uint16 | EEPROM_UVLO_EXTRUDE_MINTEMP | 0-305 | afh 175 | Power Panic Extrude mintemp | Power Panic | D3 Ax0c7d C2 -| 0x0C6D 3181 | float*4 | EEPROM_UVLO_ACCELL_MM_S2_NORMAL | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 normal | Power Panic | D3 Ax0c6d C16 -| 0x0C5D 3165 | float*4 | EEPROM_UVLO_ACCELL_MM_S2_SILENT | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 silent | Power Panic | D3 Ax0c5d C16 -| 0x0C4D 3149 | float*4 | EEPROM_UVLO_MAX_FEEDRATE_NORMAL | ??? | ff ff ff ffh | Power Panic max feedrate normal | Power Panic | D3 Ax0c4d C16 -| 0x0C3D 3133 | float*4 | EEPROM_UVLO_MAX_FEEDRATE_SILENT | ??? | ff ff ff ffh | Power Panic max feedrate silent | Power Panic | D3 Ax0c3d C16 +| 0x0C6D 3181 | float | EEPROM_UVLO_ACCELL_MM_S2_NORMAL | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 normal | Power Panic | D3 Ax0c6d C16 +| ^ | ^ | ^ | ??? | ^ | E-axis | ^ | D3 Ax0c79 C4 +| ^ | ^ | ^ | ??? | ^ | Z-axis | ^ | D3 Ax0c75 C4 +| ^ | ^ | ^ | ??? | ^ | Y-axis | ^ | D3 Ax0c71 C4 +| ^ | ^ | ^ | ??? | ^ | X-axis | ^ | D3 Ax0c6d C4 +| 0x0C5D 3165 | float | EEPROM_UVLO_ACCELL_MM_S2_SILENT | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 silent | Power Panic | D3 Ax0c5d C16 +| ^ | ^ | ^ | ??? | ^ | E-axis | ^ | D3 Ax0c69 C4 +| ^ | ^ | ^ | ??? | ^ | Z-axis | ^ | D3 Ax0c65 C4 +| ^ | ^ | ^ | ??? | ^ | Y-axis | ^ | D3 Ax0c61 C4 +| ^ | ^ | ^ | ??? | ^ | X-axis | ^ | D3 Ax0c5d C4 +| 0x0C4D 3149 | float | EEPROM_UVLO_MAX_FEEDRATE_NORMAL | ??? | ff ff ff ffh | Power Panic max feedrate normal | Power Panic | D3 Ax0c4d C16 +| ^ | ^ | ^ | ??? | ^ | E-axis | ^ | D3 Ax0d59 C4 +| ^ | ^ | ^ | ??? | ^ | Z-axis | ^ | D3 Ax0d55 C4 +| ^ | ^ | ^ | ??? | ^ | Y-axis | ^ | D3 Ax0d51 C4 +| ^ | ^ | ^ | ??? | ^ | X-axis | ^ | D3 Ax0c4d C4 +| 0x0C3D 3133 | float | EEPROM_UVLO_MAX_FEEDRATE_SILENT | ??? | ff ff ff ffh | Power Panic max feedrate silent | Power Panic | D3 Ax0c3d C16 +| ^ | ^ | ^ | ??? | ^ | E-axis | ^ | D3 Ax0d49 C4 +| ^ | ^ | ^ | ??? | ^ | Z-axis | ^ | D3 Ax0d45 C4 +| ^ | ^ | ^ | ??? | ^ | Y-axis | ^ | D3 Ax0d41 C4 +| ^ | ^ | ^ | ??? | ^ | X-axis | ^ | D3 Ax0c3d C4 | 0x0C39 3129 | float | EEPROM_UVLO_MIN_FEEDRATE | ??? | ff ff ff ffh | Power Panic min feedrate | Power Panic | D3 Ax0c39 C4 | 0x0C35 3125 | float | EEPROM_UVLO_MIN_TRAVEL_FEEDRATE | ??? | ff ff ff ffh | Power Panic min travel feedrate | Power Panic | D3 Ax0c35 C4 | 0x0C31 3121 | uint32 | EEPROM_UVLO_MIN_SEGMENT_TIME_US | ??? | ff ff ff ffh | Power Panic min segment time us | Power Panic | D3 Ax0c31 C4 -| 0x0C21 3105 | float*4 | EEPROM_UVLO_MAX_JERK | ??? | ff ff ff ffh | Power Panic max jerk | Power Panic | D3 Ax0c21 C16 +| 0x0C21 3105 | float | EEPROM_UVLO_MAX_JERK | ??? | ff ff ff ffh | Power Panic max jerk | Power Panic | D3 Ax0c21 C16 +| ^ | ^ | ^ | ??? | ^ | E-axis | ^ | D3 Ax0d2d C4 +| ^ | ^ | ^ | ??? | ^ | Z-axis | ^ | D3 Ax0d29 C4 +| ^ | ^ | ^ | ??? | ^ | Y-axis | ^ | D3 Ax0d25 C4 +| ^ | ^ | ^ | ??? | ^ | X-axis | ^ | D3 Ax0c21 C4 |Address begin|Bit/Type | Name | Valid values | Default/FactoryReset | Description |Gcode/Function| Debug code diff --git a/Firmware/power_panic.cpp b/Firmware/power_panic.cpp index 9d6ad7240..a16af7c9c 100644 --- a/Firmware/power_panic.cpp +++ b/Firmware/power_panic.cpp @@ -196,31 +196,16 @@ void uvlo_() { eeprom_update_word_notify((uint16_t*)EEPROM_UVLO_EXTRUDE_MINTEMP, extrude_min_temp); #endif //PREVENT_DANGEROUS_EXTRUDE // Save max acceleration mm per s2 - eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 0), cs.max_acceleration_mm_per_s2_normal[X_AXIS]); - eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 4), cs.max_acceleration_mm_per_s2_normal[Y_AXIS]); - eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 8), cs.max_acceleration_mm_per_s2_normal[Z_AXIS]); - eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL +12), cs.max_acceleration_mm_per_s2_normal[E_AXIS]); - eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 0), cs.max_acceleration_mm_per_s2_silent[X_AXIS]); - eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 4), cs.max_acceleration_mm_per_s2_silent[Y_AXIS]); - eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 8), cs.max_acceleration_mm_per_s2_silent[Z_AXIS]); - eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT +12), cs.max_acceleration_mm_per_s2_silent[E_AXIS]); + eeprom_update_block_notify(cs.max_acceleration_mm_per_s2_normal, (uint32_t *)EEPROM_UVLO_ACCELL_MM_S2_NORMAL, sizeof(cs.max_acceleration_mm_per_s2_normal)); + eeprom_update_block_notify(cs.max_acceleration_mm_per_s2_silent, (uint32_t *)EEPROM_UVLO_ACCELL_MM_S2_SILENT, sizeof(cs.max_acceleration_mm_per_s2_silent)); // Save feedrates - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 0), cs.max_feedrate_normal[X_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 4), cs.max_feedrate_normal[Y_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 8), cs.max_feedrate_normal[Z_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL +12), cs.max_feedrate_normal[E_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 0), cs.max_feedrate_silent[X_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 4), cs.max_feedrate_silent[Y_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 8), cs.max_feedrate_silent[Z_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT +12), cs.max_feedrate_silent[E_AXIS]); + eeprom_update_block_notify(cs.max_feedrate_normal, (float *)EEPROM_UVLO_MAX_FEEDRATE_NORMAL, sizeof(cs.max_feedrate_normal)); + eeprom_update_block_notify(cs.max_feedrate_silent, (float *)EEPROM_UVLO_MAX_FEEDRATE_SILENT, sizeof(cs.max_feedrate_silent)); // Save Jerk eeprom_update_float_notify((float *)(EEPROM_UVLO_MIN_FEEDRATE), cs.minimumfeedrate); eeprom_update_float_notify((float *)(EEPROM_UVLO_MIN_TRAVEL_FEEDRATE), cs.mintravelfeedrate); eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_MIN_SEGMENT_TIME_US), cs.min_segment_time_us); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_JERK + 0), cs.max_jerk[X_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_JERK + 4), cs.max_jerk[Y_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_JERK + 8), cs.max_jerk[Z_AXIS]); - eeprom_update_float_notify((float *)(EEPROM_UVLO_MAX_JERK +12), cs.max_jerk[E_AXIS]); + eeprom_update_block_notify(cs.max_jerk, (float *)EEPROM_UVLO_MAX_JERK, sizeof(cs.max_jerk)); // Finally store the "power outage" flag. if (did_pause_print) { eeprom_update_byte_notify((uint8_t*)EEPROM_UVLO_Z_LIFTED, 1); @@ -458,31 +443,16 @@ bool recover_machine_state_after_power_panic() { extrude_min_temp = eeprom_read_word((uint16_t*)EEPROM_UVLO_EXTRUDE_MINTEMP); #endif //PREVENT_DANGEROUS_EXTRUDE // Recover max acceleration mm per s2 - cs.max_acceleration_mm_per_s2_normal[X_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 0)); - cs.max_acceleration_mm_per_s2_normal[Y_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 4)); - cs.max_acceleration_mm_per_s2_normal[Z_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL + 8)); - cs.max_acceleration_mm_per_s2_normal[E_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_NORMAL +12)); - cs.max_acceleration_mm_per_s2_silent[X_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 0)); - cs.max_acceleration_mm_per_s2_silent[Y_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 4)); - cs.max_acceleration_mm_per_s2_silent[Z_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT + 8)); - cs.max_acceleration_mm_per_s2_silent[E_AXIS] = eeprom_read_dword((uint32_t *)(EEPROM_UVLO_ACCELL_MM_S2_SILENT +12)); + eeprom_read_block(cs.max_acceleration_mm_per_s2_normal, (uint32_t *)EEPROM_UVLO_ACCELL_MM_S2_NORMAL, sizeof(cs.max_acceleration_mm_per_s2_normal)); + eeprom_read_block(cs.max_acceleration_mm_per_s2_silent, (uint32_t *)EEPROM_UVLO_ACCELL_MM_S2_SILENT, sizeof(cs.max_acceleration_mm_per_s2_silent)); // Recover feedrates - cs.max_feedrate_normal[X_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 0)); - cs.max_feedrate_normal[Y_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 4)); - cs.max_feedrate_normal[Z_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL + 8)); - cs.max_feedrate_normal[E_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_NORMAL +12)); - cs.max_feedrate_silent[X_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 0)); - cs.max_feedrate_silent[Y_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 4)); - cs.max_feedrate_silent[Z_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT + 8)); - cs.max_feedrate_silent[E_AXIS] = eeprom_read_float((float *)(EEPROM_UVLO_MAX_FEEDRATE_SILENT +12)); + eeprom_read_block(cs.max_feedrate_normal, (float *)EEPROM_UVLO_MAX_FEEDRATE_NORMAL, sizeof(cs.max_feedrate_normal)); + eeprom_read_block(cs.max_feedrate_silent, (float *)EEPROM_UVLO_MAX_FEEDRATE_SILENT, sizeof(cs.max_feedrate_silent)); // Recover jerk cs.minimumfeedrate = eeprom_read_float((float *)EEPROM_UVLO_MIN_FEEDRATE); cs.mintravelfeedrate = eeprom_read_float((float *)EEPROM_UVLO_MIN_TRAVEL_FEEDRATE); cs.min_segment_time_us = eeprom_read_dword((uint32_t *)EEPROM_UVLO_MIN_SEGMENT_TIME_US); - cs.max_jerk[X_AXIS] = eeprom_read_float((float *)EEPROM_UVLO_MAX_JERK + 0); - cs.max_jerk[Y_AXIS] = eeprom_read_float((float *)EEPROM_UVLO_MAX_JERK + 4); - cs.max_jerk[Z_AXIS] = eeprom_read_float((float *)EEPROM_UVLO_MAX_JERK + 8); - cs.max_jerk[E_AXIS] = eeprom_read_float((float *)EEPROM_UVLO_MAX_JERK +12); + eeprom_read_block(cs.max_jerk, (float *)EEPROM_UVLO_MAX_JERK, sizeof(cs.max_jerk)); return mbl_was_active; } From 1292a82f7085f1c53b4832ad18476c5076572cd4 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Mon, 15 Apr 2024 07:43:11 +0200 Subject: [PATCH 3/3] Fix typos --- Firmware/eeprom.h | 10 +++++----- Firmware/power_panic.cpp | 8 -------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 09d8108a0..85b268f06 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -385,12 +385,12 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP | 0x0C7F 3199 | bool | EEPROM_UVLO_Z_LIFTED | 00h 0 | 00h | Power Panic Z axis NOT lifted | Power Panic | D3 Ax0c7f C1 | ^ | ^ | ^ | 01h 1 | 01h | Power Panic Z axis lifted | ^ | ^ | 0x0C7d 3197 | uint16 | EEPROM_UVLO_EXTRUDE_MINTEMP | 0-305 | afh 175 | Power Panic Extrude mintemp | Power Panic | D3 Ax0c7d C2 -| 0x0C6D 3181 | float | EEPROM_UVLO_ACCELL_MM_S2_NORMAL | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 normal | Power Panic | D3 Ax0c6d C16 +| 0x0C6D 3181 | uint32 | EEPROM_UVLO_ACCELL_MM_S2_NORMAL | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 normal | Power Panic | D3 Ax0c6d C16 | ^ | ^ | ^ | ??? | ^ | E-axis | ^ | D3 Ax0c79 C4 | ^ | ^ | ^ | ??? | ^ | Z-axis | ^ | D3 Ax0c75 C4 | ^ | ^ | ^ | ??? | ^ | Y-axis | ^ | D3 Ax0c71 C4 | ^ | ^ | ^ | ??? | ^ | X-axis | ^ | D3 Ax0c6d C4 -| 0x0C5D 3165 | float | EEPROM_UVLO_ACCELL_MM_S2_SILENT | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 silent | Power Panic | D3 Ax0c5d C16 +| 0x0C5D 3165 | uint32 | EEPROM_UVLO_ACCELL_MM_S2_SILENT | ??? | ff ff ff ffh | Power Panic acceleration mm per s2 silent | Power Panic | D3 Ax0c5d C16 | ^ | ^ | ^ | ??? | ^ | E-axis | ^ | D3 Ax0c69 C4 | ^ | ^ | ^ | ??? | ^ | Z-axis | ^ | D3 Ax0c65 C4 | ^ | ^ | ^ | ??? | ^ | Y-axis | ^ | D3 Ax0c61 C4 @@ -656,12 +656,12 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE); #define EEPROM_UVLO_Z_LIFTED (EEPROM_CUSTOM_MENDEL_NAME-1) //bool #define EEPROM_UVLO_EXTRUDE_MINTEMP (EEPROM_UVLO_Z_LIFTED-2) //uint16_t #define EEPROM_UVLO_ACCELL_MM_S2_NORMAL (EEPROM_UVLO_EXTRUDE_MINTEMP-4*4) // 4 x float -#define EEPROM_UVLO_ACCELL_MM_S2_SILENT (EEPROM_UVLO_ACCELL_MM_S2_NORMAL-4*4) // 4 x float -#define EEPROM_UVLO_MAX_FEEDRATE_NORMAL (EEPROM_UVLO_ACCELL_MM_S2_SILENT-4*4) // 4 x float +#define EEPROM_UVLO_ACCELL_MM_S2_SILENT (EEPROM_UVLO_ACCELL_MM_S2_NORMAL-4*4) // 4 x uint32_t +#define EEPROM_UVLO_MAX_FEEDRATE_NORMAL (EEPROM_UVLO_ACCELL_MM_S2_SILENT-4*4) // 4 x uint32_t #define EEPROM_UVLO_MAX_FEEDRATE_SILENT (EEPROM_UVLO_MAX_FEEDRATE_NORMAL-4*4) // 4 x float #define EEPROM_UVLO_MIN_FEEDRATE (EEPROM_UVLO_MAX_FEEDRATE_SILENT-4) //float #define EEPROM_UVLO_MIN_TRAVEL_FEEDRATE (EEPROM_UVLO_MIN_FEEDRATE-4) //float -#define EEPROM_UVLO_MIN_SEGMENT_TIME_US (EEPROM_UVLO_MIN_TRAVEL_FEEDRATE-4) //unit32_t +#define EEPROM_UVLO_MIN_SEGMENT_TIME_US (EEPROM_UVLO_MIN_TRAVEL_FEEDRATE-4) //uint32_t #define EEPROM_UVLO_MAX_JERK (EEPROM_UVLO_MIN_SEGMENT_TIME_US-4*4) // 4 x float //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. #define EEPROM_LAST_ITEM EEPROM_UVLO_MAX_JERK diff --git a/Firmware/power_panic.cpp b/Firmware/power_panic.cpp index a16af7c9c..55c790cf4 100644 --- a/Firmware/power_panic.cpp +++ b/Firmware/power_panic.cpp @@ -192,16 +192,12 @@ void uvlo_() { #endif #ifdef PREVENT_DANGEROUS_EXTRUDE - // Save min extrude temp eeprom_update_word_notify((uint16_t*)EEPROM_UVLO_EXTRUDE_MINTEMP, extrude_min_temp); #endif //PREVENT_DANGEROUS_EXTRUDE - // Save max acceleration mm per s2 eeprom_update_block_notify(cs.max_acceleration_mm_per_s2_normal, (uint32_t *)EEPROM_UVLO_ACCELL_MM_S2_NORMAL, sizeof(cs.max_acceleration_mm_per_s2_normal)); eeprom_update_block_notify(cs.max_acceleration_mm_per_s2_silent, (uint32_t *)EEPROM_UVLO_ACCELL_MM_S2_SILENT, sizeof(cs.max_acceleration_mm_per_s2_silent)); - // Save feedrates eeprom_update_block_notify(cs.max_feedrate_normal, (float *)EEPROM_UVLO_MAX_FEEDRATE_NORMAL, sizeof(cs.max_feedrate_normal)); eeprom_update_block_notify(cs.max_feedrate_silent, (float *)EEPROM_UVLO_MAX_FEEDRATE_SILENT, sizeof(cs.max_feedrate_silent)); - // Save Jerk eeprom_update_float_notify((float *)(EEPROM_UVLO_MIN_FEEDRATE), cs.minimumfeedrate); eeprom_update_float_notify((float *)(EEPROM_UVLO_MIN_TRAVEL_FEEDRATE), cs.mintravelfeedrate); eeprom_update_dword_notify((uint32_t *)(EEPROM_UVLO_MIN_SEGMENT_TIME_US), cs.min_segment_time_us); @@ -439,16 +435,12 @@ bool recover_machine_state_after_power_panic() { #endif #ifdef PREVENT_DANGEROUS_EXTRUDE - // Recover min extrude temp extrude_min_temp = eeprom_read_word((uint16_t*)EEPROM_UVLO_EXTRUDE_MINTEMP); #endif //PREVENT_DANGEROUS_EXTRUDE - // Recover max acceleration mm per s2 eeprom_read_block(cs.max_acceleration_mm_per_s2_normal, (uint32_t *)EEPROM_UVLO_ACCELL_MM_S2_NORMAL, sizeof(cs.max_acceleration_mm_per_s2_normal)); eeprom_read_block(cs.max_acceleration_mm_per_s2_silent, (uint32_t *)EEPROM_UVLO_ACCELL_MM_S2_SILENT, sizeof(cs.max_acceleration_mm_per_s2_silent)); - // Recover feedrates eeprom_read_block(cs.max_feedrate_normal, (float *)EEPROM_UVLO_MAX_FEEDRATE_NORMAL, sizeof(cs.max_feedrate_normal)); eeprom_read_block(cs.max_feedrate_silent, (float *)EEPROM_UVLO_MAX_FEEDRATE_SILENT, sizeof(cs.max_feedrate_silent)); - // Recover jerk cs.minimumfeedrate = eeprom_read_float((float *)EEPROM_UVLO_MIN_FEEDRATE); cs.mintravelfeedrate = eeprom_read_float((float *)EEPROM_UVLO_MIN_TRAVEL_FEEDRATE); cs.min_segment_time_us = eeprom_read_dword((uint32_t *)EEPROM_UVLO_MIN_SEGMENT_TIME_US);