From 3406b47949a0f47a6909198bb6f575afaa6907eb Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Sun, 3 May 2015 17:44:20 +0200 Subject: [PATCH 1/2] increase irom0 from 0x3C000 to 0x6B000 (+192KB) space --- libraries/EEPROM/EEPROM.cpp | 21 ++++++++++++++------- libraries/EEPROM/EEPROM.h | 2 +- platform.txt | 4 ++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/libraries/EEPROM/EEPROM.cpp b/libraries/EEPROM/EEPROM.cpp index 74a1a8570..0949e4195 100644 --- a/libraries/EEPROM/EEPROM.cpp +++ b/libraries/EEPROM/EEPROM.cpp @@ -30,7 +30,7 @@ #include "spi_flash.h" } -#define CONFIG_START_SECTOR 0x3C +#define CONFIG_START_SECTOR 0x7b #define CONFIG_SECTOR (CONFIG_START_SECTOR + 0) #define CONFIG_ADDR (SPI_FLASH_SEC_SIZE * CONFIG_SECTOR) @@ -82,16 +82,23 @@ void EEPROMClass::write(int address, uint8_t value) _dirty = true; } -void EEPROMClass::commit() +bool EEPROMClass::commit() { - if (!_size || !_dirty) - return; + bool ret = false; + if (!_size) + return false; + if(!_dirty) + return true; ETS_UART_INTR_DISABLE(); - spi_flash_erase_sector(CONFIG_SECTOR); - spi_flash_write(CONFIG_ADDR, reinterpret_cast(_data), _size); + 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(); - _dirty = false; + return ret; } diff --git a/libraries/EEPROM/EEPROM.h b/libraries/EEPROM/EEPROM.h index 52de83909..932b791bb 100644 --- a/libraries/EEPROM/EEPROM.h +++ b/libraries/EEPROM/EEPROM.h @@ -33,7 +33,7 @@ class EEPROMClass void begin(size_t size); uint8_t read(int address); void write(int address, uint8_t val); - void commit(); + bool commit(); void end(); template T &get(int address, T &t) diff --git a/platform.txt b/platform.txt index 09b53c6e6..ebeeadfd4 100644 --- a/platform.txt +++ b/platform.txt @@ -74,7 +74,7 @@ recipe.objcopy.eep.pattern= ## Create hex #recipe.objcopy.hex.pattern="{compiler.path}{compiler.elf2hex.cmd}" {compiler.elf2hex.flags} {compiler.elf2hex.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.hex" -recipe.objcopy.hex.pattern="{compiler.tools.path}{compiler.esptool.cmd}" -eo "{build.path}/{build.project_name}.elf" -bo "{build.path}/{build.project_name}_00000.bin" -bm {build.flash_mode} -bf {build.flash_freq} -bz {build.flash_size} -bs .text -bs .data -bs .rodata -bc -ec -eo "{build.path}/{build.project_name}.elf" -es .irom0.text "{build.path}/{build.project_name}_40000.bin" -ec +recipe.objcopy.hex.pattern="{compiler.tools.path}{compiler.esptool.cmd}" -eo "{build.path}/{build.project_name}.elf" -bo "{build.path}/{build.project_name}_00000.bin" -bm {build.flash_mode} -bf {build.flash_freq} -bz {build.flash_size} -bs .text -bs .data -bs .rodata -bc -ec -eo "{build.path}/{build.project_name}.elf" -es .irom0.text "{build.path}/{build.project_name}_10000.bin" -ec ## Compute size recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" @@ -91,4 +91,4 @@ tools.esptool.path={runtime.ide.path}/hardware/tools/esp8266 tools.esptool.upload.protocol=esp tools.esptool.upload.params.verbose=-vv tools.esptool.upload.params.quiet= -tools.esptool.upload.pattern="{path}/{cmd}" {upload.verbose} -cd {upload.resetmethod} -cb {upload.speed} -cp "{serial.port}" -ca 0x00000 -cf "{build.path}/{build.project_name}_00000.bin" -ca 0x40000 -cf "{build.path}/{build.project_name}_40000.bin" +tools.esptool.upload.pattern="{path}/{cmd}" {upload.verbose} -cd {upload.resetmethod} -cb {upload.speed} -cp "{serial.port}" -ca 0x00000 -cf "{build.path}/{build.project_name}_00000.bin" -ca 0x10000 -cf "{build.path}/{build.project_name}_10000.bin" From 48ddce71c6a26d1254b6c763ca85cd8651be976d Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Sun, 3 May 2015 18:15:54 +0200 Subject: [PATCH 2/2] add EEPROM.getDataPtr() fix all warnings in EEPROMClass --- libraries/EEPROM/EEPROM.cpp | 11 ++++++++--- libraries/EEPROM/EEPROM.h | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/libraries/EEPROM/EEPROM.cpp b/libraries/EEPROM/EEPROM.cpp index 0949e4195..74e7f3b0f 100644 --- a/libraries/EEPROM/EEPROM.cpp +++ b/libraries/EEPROM/EEPROM.cpp @@ -35,7 +35,7 @@ #define CONFIG_ADDR (SPI_FLASH_SEC_SIZE * CONFIG_SECTOR) EEPROMClass::EEPROMClass() -: _data(0), _size(0) +: _data(0), _size(0), _dirty(false) { } @@ -67,7 +67,7 @@ void EEPROMClass::end() uint8_t EEPROMClass::read(int address) { - if (address < 0 || address >= _size) + if (address < 0 || (size_t)address >= _size) return 0; return _data[address]; @@ -75,7 +75,7 @@ uint8_t EEPROMClass::read(int address) void EEPROMClass::write(int address, uint8_t value) { - if (address < 0 || address >= _size) + if (address < 0 || (size_t)address >= _size) return; _data[address] = value; @@ -101,5 +101,10 @@ bool EEPROMClass::commit() return ret; } +uint8_t * EEPROMClass::getDataPtr() +{ + return &_data[0]; +} + EEPROMClass EEPROM; diff --git a/libraries/EEPROM/EEPROM.h b/libraries/EEPROM/EEPROM.h index 932b791bb..97dd4c26a 100644 --- a/libraries/EEPROM/EEPROM.h +++ b/libraries/EEPROM/EEPROM.h @@ -36,6 +36,8 @@ class EEPROMClass bool commit(); void end(); + uint8_t * getDataPtr(); + template T &get(int address, T &t) { if (address < 0 || address + sizeof(T) > _size)