Use of `eeprom_update_block_notify` and `eeprom_read_block` reduces the flash usage a lot.

Thanks to @gudnimg
This commit is contained in:
3d-gussner 2024-04-10 09:24:33 +02:00
parent 5c0e014215
commit f50e754f26
2 changed files with 35 additions and 45 deletions

View File

@ -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

View File

@ -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;
}