mirror of
https://github.com/letscontrolit/ESPEasy.git
synced 2026-09-11 09:04:53 +00:00
[EEPROM/RTC] Add timing stats for read/write to EEPROM/RTC
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
#include "../Helpers/EEPROMExternal.h"
|
||||
#if FEATURE_EEPROM_EXTERNAL
|
||||
|
||||
# include "../../../ESPEasy_common.h"
|
||||
# include "../../../src/DataStructs/TimingStats.h"
|
||||
# include "../../../src/Globals/Settings.h"
|
||||
# include "../../../src/Helpers/I2C_access.h"
|
||||
# include "../../../ESPEasy_common.h"
|
||||
# include "../../../src/Helpers/StringConverter.h"
|
||||
|
||||
|
||||
@@ -362,10 +363,17 @@ bool writeEEPROMSlot(uint32_t slot,
|
||||
const uint32_t addr = getEEPROMAddressForSlot(slot);
|
||||
|
||||
if ((addr != std::numeric_limits<uint32_t>::max()) && !isEEPROMExternalWriteProtected()) {
|
||||
const ESPEASY_RULES_FLOAT_TYPE oldData = EEPROMExternal->readDouble(addr);
|
||||
ESPEASY_RULES_FLOAT_TYPE oldData{};
|
||||
{
|
||||
START_TIMER;
|
||||
oldData = EEPROMExternal->readDouble(addr);
|
||||
STOP_TIMER(READ_EEPROM_SLOT);
|
||||
}
|
||||
|
||||
if (!essentiallyEqual(oldData, data)) {
|
||||
START_TIMER;
|
||||
EEPROMExternal->writeDouble(addr, data); // Always write double size!
|
||||
STOP_TIMER(WRITE_EEPROM_SLOT);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -377,15 +385,14 @@ bool writeEEPROMSlot(uint32_t slot,
|
||||
*/
|
||||
ESPEASY_RULES_FLOAT_TYPE readEEPROMSlot(uint32_t slot) {
|
||||
const uint32_t addr = getEEPROMAddressForSlot(slot);
|
||||
ESPEASY_RULES_FLOAT_TYPE res{};
|
||||
|
||||
if (addr != std::numeric_limits<uint32_t>::max()) {
|
||||
return EEPROMExternal->readDouble(addr);
|
||||
START_TIMER;
|
||||
res = EEPROMExternal->readDouble(addr);
|
||||
STOP_TIMER(READ_EEPROM_SLOT);
|
||||
}
|
||||
# if FEATURE_USE_DOUBLE_AS_ESPEASY_RULES_FLOAT_TYPE
|
||||
return 0.0;
|
||||
# else // if FEATURE_USE_DOUBLE_AS_ESPEASY_RULES_FLOAT_TYPE
|
||||
return 0.0f;
|
||||
# endif // if FEATURE_USE_DOUBLE_AS_ESPEASY_RULES_FLOAT_TYPE
|
||||
return res;
|
||||
}
|
||||
|
||||
} // namespace eeprom
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "../Helpers/RTCSRAMStorage.h"
|
||||
#if FEATURE_RTC_SRAM_STORAGE
|
||||
|
||||
# include "../../../src/DataStructs/TimingStats.h"
|
||||
# include "../../../src/Globals/Settings.h"
|
||||
# include "../../../src/Helpers/I2C_access.h"
|
||||
# include "../../../ESPEasy_common.h"
|
||||
@@ -170,16 +172,20 @@ bool writeRTCSRAMSlot(uint32_t slot,
|
||||
const ExtTimeSource_e type = Settings.ExtTimeSource();
|
||||
uint8_t _b[sizeof_rtcsram_slot]{};
|
||||
|
||||
START_TIMER;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ExtTimeSource_e::DS1307:
|
||||
{
|
||||
RTC_DS1307 rtc;
|
||||
rtc.readnvram(_b, sizeof_rtcsram_slot, addr);
|
||||
STOP_TIMER(READ_RTC_SLOT);
|
||||
const SRAM_STORAGE_FLOAT_TYPE oldData = *(SRAM_STORAGE_FLOAT_TYPE *)&_b[0];
|
||||
|
||||
if (!essentiallyEqual(oldData, data)) {
|
||||
rtc.writenvram(addr, (uint8_t *)&data, sizeof_rtcsram_slot);
|
||||
STOP_TIMER(WRITE_RTC_SLOT);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -187,10 +193,12 @@ bool writeRTCSRAMSlot(uint32_t slot,
|
||||
{
|
||||
RTC_DS3231 rtc;
|
||||
rtc.readnvram(_b, sizeof_rtcsram_slot, addr);
|
||||
STOP_TIMER(READ_RTC_SLOT);
|
||||
const SRAM_STORAGE_FLOAT_TYPE oldData = *(SRAM_STORAGE_FLOAT_TYPE *)&_b[0];
|
||||
|
||||
if (!essentiallyEqual(oldData, data)) {
|
||||
rtc.writenvram(addr, (uint8_t *)&data, sizeof_rtcsram_slot);
|
||||
STOP_TIMER(WRITE_RTC_SLOT);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -205,10 +213,12 @@ bool writeRTCSRAMSlot(uint32_t slot,
|
||||
}
|
||||
|
||||
rtc.readnvram(_b, sizeof_rtcsram_slot, addr);
|
||||
STOP_TIMER(READ_RTC_SLOT);
|
||||
const SRAM_STORAGE_FLOAT_TYPE oldData = *(SRAM_STORAGE_FLOAT_TYPE *)&_b[0];
|
||||
|
||||
if (!essentiallyEqual(oldData, data)) {
|
||||
rtc.writenvram(addr, (uint8_t *)&data, sizeof_rtcsram_slot);
|
||||
STOP_TIMER(WRITE_RTC_SLOT);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -233,6 +243,7 @@ SRAM_STORAGE_FLOAT_TYPE readRTCSRAMSlot(uint32_t slot) {
|
||||
if ((addr != std::numeric_limits<uint32_t>::max()) && (selectRTCSRAMI2CBus() > 0)) {
|
||||
const ExtTimeSource_e type = Settings.ExtTimeSource();
|
||||
uint8_t _b[sizeof_rtcsram_slot]{};
|
||||
START_TIMER;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
@@ -240,12 +251,14 @@ SRAM_STORAGE_FLOAT_TYPE readRTCSRAMSlot(uint32_t slot) {
|
||||
{
|
||||
RTC_DS1307 rtc;
|
||||
rtc.readnvram(_b, sizeof_rtcsram_slot, addr);
|
||||
STOP_TIMER(READ_RTC_SLOT);
|
||||
return *(SRAM_STORAGE_FLOAT_TYPE *)&_b[0];
|
||||
}
|
||||
case ExtTimeSource_e::DS3232:
|
||||
{
|
||||
RTC_DS3231 rtc;
|
||||
rtc.readnvram(_b, sizeof_rtcsram_slot, addr);
|
||||
STOP_TIMER(READ_RTC_SLOT);
|
||||
return *(SRAM_STORAGE_FLOAT_TYPE *)&_b[0];
|
||||
}
|
||||
# if FEATURE_EXT_RTC_PCF8583
|
||||
@@ -259,6 +272,7 @@ SRAM_STORAGE_FLOAT_TYPE readRTCSRAMSlot(uint32_t slot) {
|
||||
}
|
||||
|
||||
rtc.readnvram(_b, sizeof_rtcsram_slot, addr);
|
||||
STOP_TIMER(READ_RTC_SLOT);
|
||||
return *(SRAM_STORAGE_FLOAT_TYPE *)&_b[0];
|
||||
}
|
||||
# endif // if FEATURE_EXT_RTC_PCF8583
|
||||
|
||||
@@ -285,6 +285,16 @@ const __FlashStringHelper* getMiscStatsName_F(TimingStatsElements stat) {
|
||||
case TimingStatsElements::HANDLE_SERVING_WEBPAGE_JSON: return F("handle webpage JSON");
|
||||
case TimingStatsElements::WIFI_SCAN_ASYNC: return F("WiFi Scan Async");
|
||||
case TimingStatsElements::WIFI_SCAN_SYNC: return F("WiFi Scan Sync (blocking)");
|
||||
// EEPROM/RTC related
|
||||
#if FEATURE_EEPROM_EXTERNAL
|
||||
case TimingStatsElements::READ_EEPROM_SLOT: return F("readEEPROMSlot()");
|
||||
case TimingStatsElements::WRITE_EEPROM_SLOT: return F("writeEEPROMSlot()");
|
||||
#endif
|
||||
#if FEATURE_RTC_SRAM_STORAGE
|
||||
case TimingStatsElements::READ_RTC_SLOT: return F("readRTCSlot()");
|
||||
case TimingStatsElements::WRITE_RTC_SLOT: return F("writeRTCSlot()");
|
||||
#endif
|
||||
|
||||
case TimingStatsElements::NTP_SUCCESS: return F("NTP Success");
|
||||
case TimingStatsElements::NTP_FAIL: return F("NTP Fail");
|
||||
case TimingStatsElements::SYSTIME_UPDATED: return F("Systime Set");
|
||||
|
||||
@@ -136,6 +136,16 @@ enum class TimingStatsElements {
|
||||
WIFI_SCAN_ASYNC,
|
||||
WIFI_SCAN_SYNC,
|
||||
|
||||
// EEPROM/RTC related
|
||||
#if FEATURE_EEPROM_EXTERNAL
|
||||
READ_EEPROM_SLOT,
|
||||
WRITE_EEPROM_SLOT,
|
||||
#endif
|
||||
#if FEATURE_RTC_SRAM_STORAGE
|
||||
READ_RTC_SLOT,
|
||||
WRITE_RTC_SLOT,
|
||||
#endif
|
||||
|
||||
// Time sync (also network related)
|
||||
NTP_SUCCESS,
|
||||
NTP_FAIL,
|
||||
|
||||
Reference in New Issue
Block a user