[EEPROM/RTC] Add timing stats for read/write to EEPROM/RTC

This commit is contained in:
TD-er
2026-08-20 16:24:52 +02:00
committed by Ton Huisman
parent 702daa5c6f
commit 742cd74f34
4 changed files with 49 additions and 8 deletions
+15 -8
View File
@@ -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
+10
View File
@@ -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");
+10
View File
@@ -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,