Prevent extra settings.load on boot (#14499)

This commit is contained in:
Tanguy Pruvot 2019-07-06 05:25:59 +02:00 committed by Scott Lahteine
parent dc02d0720d
commit 8873c583d3
3 changed files with 13 additions and 9 deletions

View File

@ -941,7 +941,7 @@ void setup() {
// Load data from EEPROM if available (or use defaults) // Load data from EEPROM if available (or use defaults)
// This also updates variables in the planner, elsewhere // This also updates variables in the planner, elsewhere
(void)settings.load(); settings.first_load();
#if HAS_M206_COMMAND #if HAS_M206_COMMAND
// Initialize current position based on home_offset // Initialize current position based on home_offset

View File

@ -29,8 +29,6 @@
class MarlinSettings { class MarlinSettings {
public: public:
MarlinSettings() { }
static uint16_t datasize(); static uint16_t datasize();
static void reset(); static void reset();
@ -55,9 +53,15 @@ class MarlinSettings {
#endif #endif
#if ENABLED(EEPROM_SETTINGS) #if ENABLED(EEPROM_SETTINGS)
static bool load(); // Return 'true' if data was loaded ok static bool load(); // Return 'true' if data was loaded ok
static bool validate(); // Return 'true' if EEPROM data is ok static bool validate(); // Return 'true' if EEPROM data is ok
static inline void first_load() {
static bool loaded = false;
if (!loaded && load()) loaded = true;
}
#if ENABLED(AUTO_BED_LEVELING_UBL) // Eventually make these available if any leveling system #if ENABLED(AUTO_BED_LEVELING_UBL) // Eventually make these available if any leveling system
// That can store is enabled // That can store is enabled
static uint16_t meshes_start_index(); static uint16_t meshes_start_index();
@ -73,6 +77,8 @@ class MarlinSettings {
#else #else
FORCE_INLINE FORCE_INLINE
static bool load() { reset(); report(); return true; } static bool load() { reset(); report(); return true; }
FORCE_INLINE
static void first_load() { (void)load(); }
#endif #endif
#if DISABLED(DISABLE_M503) #if DISABLED(DISABLE_M503)

View File

@ -353,8 +353,8 @@ void CardReader::initsd() {
else { else {
flag.detected = true; flag.detected = true;
SERIAL_ECHO_MSG(MSG_SD_CARD_OK); SERIAL_ECHO_MSG(MSG_SD_CARD_OK);
#if ENABLED(EEPROM_SETTINGS) && DISABLED(FLASH_EEPROM_EMULATION) #if ENABLED(EEPROM_SETTINGS) && NONE(FLASH_EEPROM_EMULATION, SPI_EEPROM, I2C_EEPROM)
(void)settings.load(); settings.first_load();
#endif #endif
} }
setroot(); setroot();
@ -560,10 +560,8 @@ void CardReader::checkautostart() {
if (autostart_index < 0 || flag.sdprinting) return; if (autostart_index < 0 || flag.sdprinting) return;
if (!isDetected()) initsd(); if (!isDetected()) initsd();
#if ENABLED(EEPROM_SETTINGS) && NONE(FLASH_EEPROM_EMULATION, SPI_EEPROM, I2C_EEPROM)
#if ENABLED(EEPROM_SETTINGS) && DISABLED(FLASH_EEPROM_EMULATION) else settings.first_load();
SERIAL_ECHOLNPGM("Loading settings from SD");
(void)settings.load();
#endif #endif
if (isDetected() if (isDetected()