Refactor Config_Web to use heap-allocated JSON document and add stack usage check script

This commit is contained in:
2026-03-07 18:43:17 +01:00
parent c9678e16cd
commit fedeeea9cb
2 changed files with 25 additions and 4 deletions

View File

@@ -9,6 +9,7 @@ namespace
const size_t kConfigJsonCapacity = 4096;
const byte kDnsPort = 53;
const unsigned long kWifiReconnectIntervalMs = 10000;
using ConfigJsonDocument = StaticJsonDocument<kConfigJsonCapacity>;
WebServer server(80);
DNSServer dnsServer;
@@ -17,6 +18,14 @@ namespace
bool staReconnectEnabled = false;
bool staConnectionKnown = false;
unsigned long lastStaReconnectAttemptMs = 0;
ConfigJsonDocument g_configJsonScratch;
ConfigJsonDocument &configJsonScratch()
{
// Keep the large config JSON buffer off ESP32 Arduino's 8 KB loopTask stack.
g_configJsonScratch.clear();
return g_configJsonScratch;
}
void redirectToRoot()
{
@@ -371,7 +380,7 @@ bool loadConfigFromFile()
return saveConfigToFile();
}
StaticJsonDocument<kConfigJsonCapacity> doc;
ConfigJsonDocument &doc = configJsonScratch();
DeserializationError err = deserializeJson(doc, file);
file.close();
if (err)
@@ -424,7 +433,7 @@ bool saveConfigToFile()
return false;
}
StaticJsonDocument<kConfigJsonCapacity> doc;
ConfigJsonDocument &doc = configJsonScratch();
JsonArray params = doc.createNestedArray("parameters");
for (size_t i = 0; i < configParameterCount; ++i)
{
@@ -461,7 +470,7 @@ bool saveConfigToFile()
String buildConfigJson()
{
StaticJsonDocument<kConfigJsonCapacity> doc;
ConfigJsonDocument &doc = configJsonScratch();
JsonArray params = doc.createNestedArray("parameters");
for (size_t i = 0; i < configParameterCount; ++i)
{
@@ -497,7 +506,7 @@ String buildConfigJson()
bool applyConfigJson(const String &payload, String &errorMessage)
{
StaticJsonDocument<kConfigJsonCapacity> doc;
ConfigJsonDocument &doc = configJsonScratch();
DeserializationError err = deserializeJson(doc, payload);
if (err)
{