From cdf4aa053604aa01d8be3d80a33da41cf89f3119 Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Sat, 16 May 2015 23:10:06 +0200 Subject: [PATCH] fix possible problems in EEPROM regarding interrupt handling and SPI flash blocking --- hardware/esp8266com/esp8266/libraries/EEPROM/EEPROM.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/hardware/esp8266com/esp8266/libraries/EEPROM/EEPROM.cpp b/hardware/esp8266com/esp8266/libraries/EEPROM/EEPROM.cpp index 74e7f3b0f..2e1eb4fca 100644 --- a/hardware/esp8266com/esp8266/libraries/EEPROM/EEPROM.cpp +++ b/hardware/esp8266com/esp8266/libraries/EEPROM/EEPROM.cpp @@ -49,7 +49,9 @@ void EEPROMClass::begin(size_t size) _data = new uint8_t[size]; _size = size; + noInterrupts(); spi_flash_read(CONFIG_ADDR, reinterpret_cast(_data), _size); + interrupts(); } void EEPROMClass::end() @@ -90,19 +92,21 @@ bool EEPROMClass::commit() if(!_dirty) return true; - ETS_UART_INTR_DISABLE(); + noInterrupts(); if(spi_flash_erase_sector(CONFIG_SECTOR) == SPI_FLASH_RESULT_OK) { if(spi_flash_write(CONFIG_ADDR, reinterpret_cast(_data), _size) == SPI_FLASH_RESULT_OK) { _dirty = false; ret = true; } } - ETS_UART_INTR_ENABLE(); + interrupts(); + return ret; } uint8_t * EEPROMClass::getDataPtr() { + _dirty = true; return &_data[0]; }