1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-19 22:35:23 +03:00

Cleanup EEPROM writing code.

Avoid goto/label usage by using a loop instead, remove nesting, improve
and simplify logic, use 8 bit type for attempt counter.
This commit is contained in:
Dominic Clifton 2014-04-21 01:56:14 +01:00
parent bd95c38ff0
commit 54424bf3fb

View file

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