diff --git a/src/config.c b/src/config.c index b23ecff712..1b0a0e9ad3 100755 --- a/src/config.c +++ b/src/config.c @@ -111,7 +111,7 @@ void writeEEPROM(void) uint32_t i; uint8_t chk = 0; const uint8_t *p; - int tries = 0; + int8_t attemptsRemaining = 3; // prepare checksum/version constants mcfg.version = EEPROM_CONF_VERSION; @@ -126,27 +126,22 @@ void writeEEPROM(void) mcfg.chk = chk; // write it -retry: FLASH_Unlock(); - FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); + while (attemptsRemaining--) { + FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); - if (FLASH_ErasePage(FLASH_WRITE_ADDR) == FLASH_COMPLETE) { - for (i = 0; i < sizeof(master_t); i += 4) { + status = FLASH_ErasePage(FLASH_WRITE_ADDR); + for (i = 0; i < sizeof(master_t) && status == FLASH_COMPLETE; i += 4) { status = FLASH_ProgramWord(FLASH_WRITE_ADDR + i, *(uint32_t *) ((char *)&mcfg + i)); - if (status != FLASH_COMPLETE) { - FLASH_Lock(); - tries++; - if (tries < 3) - goto retry; - else - break; - } + } + if (status == FLASH_COMPLETE) { + break; } } FLASH_Lock(); // Flash write failed - just die now - if (tries == 3 || !isEEPROMContentValid()) { + if (status != FLASH_COMPLETE || !isEEPROMContentValid()) { failureMode(10); } }