mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-12 01:53:07 +03:00
@ -42,7 +42,7 @@ EEPROMClass::EEPROMClass()
|
||||
|
||||
void EEPROMClass::begin(size_t size)
|
||||
{
|
||||
if (size < 0)
|
||||
if (size <= 0)
|
||||
return;
|
||||
if (size > SPI_FLASH_SEC_SIZE)
|
||||
size = SPI_FLASH_SEC_SIZE;
|
||||
@ -50,7 +50,9 @@ void EEPROMClass::begin(size_t size)
|
||||
_data = new uint8_t[size];
|
||||
_size = size;
|
||||
|
||||
noInterrupts();
|
||||
spi_flash_read(CONFIG_ADDR, reinterpret_cast<uint32_t*>(_data), _size);
|
||||
interrupts();
|
||||
}
|
||||
|
||||
void EEPROMClass::end()
|
||||
@ -59,8 +61,9 @@ void EEPROMClass::end()
|
||||
return;
|
||||
|
||||
commit();
|
||||
|
||||
delete[] _data;
|
||||
if(_data) {
|
||||
delete[] _data;
|
||||
}
|
||||
_data = 0;
|
||||
_size = 0;
|
||||
}
|
||||
@ -70,6 +73,8 @@ uint8_t EEPROMClass::read(int address)
|
||||
{
|
||||
if (address < 0 || (size_t)address >= _size)
|
||||
return 0;
|
||||
if(!_data)
|
||||
return 0;
|
||||
|
||||
return _data[address];
|
||||
}
|
||||
@ -78,6 +83,8 @@ void EEPROMClass::write(int address, uint8_t value)
|
||||
{
|
||||
if (address < 0 || (size_t)address >= _size)
|
||||
return;
|
||||
if(!_data)
|
||||
return;
|
||||
|
||||
_data[address] = value;
|
||||
_dirty = true;
|
||||
@ -90,20 +97,24 @@ bool EEPROMClass::commit()
|
||||
return false;
|
||||
if(!_dirty)
|
||||
return true;
|
||||
if(!_data)
|
||||
return false;
|
||||
|
||||
ETS_UART_INTR_DISABLE();
|
||||
noInterrupts();
|
||||
if(spi_flash_erase_sector(CONFIG_SECTOR) == SPI_FLASH_RESULT_OK) {
|
||||
if(spi_flash_write(CONFIG_ADDR, reinterpret_cast<uint32_t*>(_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];
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user