GerLech / WebConfig

For ESP8266 and ESP32 edit configuration with web page and save it on SPIFFS. If no connection to a local WLAN exists configuration over web page can be done using an access point
GNU Lesser General Public License v3.0
80 stars 19 forks source link

Excesive RAM utilisation #6

Open kostuch opened 4 years ago

kostuch commented 4 years ago

Hi, I'm using your lib. Good piece of work. But I slightly modified it to reduce high RAM utilisation.

The parameters should be rather covered by 'F' macro like below:

    String params = F("["
                      "{"
                      "'name':'XYZ',"
                      "'label':'some label txt',"
                      "'type':");
    params += String(INPUTPASSWORD);
    params += F(","
                "'default':'ABCD'"
                "},"
                "{"
                "'name':'ssid',"
                "'label':'some label txt',"
                "'type':");
    params += String(INPUTTEXT);
    params += F(","
                "'default':'DFLT'"
                "},"
                "{"
                "'name':'pwd',"
                "'label':'some label txt',"
                "'type':");
    params += String(INPUTPASSWORD);
    params += F(","
                "'default':'my secret'"
                "},"

...and so on

Also in WebConfig.cpp all const char should be defined with PROGMEM attribute:

const char HTML_START[] PROGMEM =
    "<!DOCTYPE HTML>\n"
    "<html>\n"
    "<head>\n"

...and then read by strcpy_P(_buf, HTML_START); instead of strcpy.

All literals covered by F macro, like: if (server->hasArg(F("SAVE")) instead of if (server->hasArg("SAVE") Don't forget to #include "progmem.h"

I also moved declaration huge _buf variable from private section of header to the function body void WebConfig::handleFormRequest to make it automatic var.

Above modifications can gain about 3k precious RAM for other purposes. Just look at the ESP.getFreeHeap() value before and after such modification.

betyar commented 4 years ago

Excellent! I also noticed after compiling that the dynamic memory available was drastically reduced by 33%! Do you have a fork which include these changes and can be downloaded?

kostuch commented 4 years ago

Excellent! I also noticed after compiling that the dynamic memory available was drastically reduced by 33%! Do you have a fork which include these changes and can be downloaded?

I have modified fork on local disk. Besides RAM saving just minor changes like utf-8 in html header or changed controls' alignment on generated page. I can send you for the reference if you like.

betyar commented 4 years ago

Yes, please. Thanks a lot!

ArminPP commented 4 years ago

I have modified fork on local disk. Besides RAM saving just minor changes like utf-8 in html header or changed controls' alignment on generated page. I can send you for the reference if you like.

Hello kostuch, I am also interested in your modifications. May I ask you if you can publish your work here, or can you upload the code somewhere (maybe to Dropbox, or something similar)? Thanks in advance, Armin

kostuch commented 4 years ago

Sorry for late reply. If someone want to see my version, here it is: https://github.com/kostuch/webconfig I just pasted files as they are (my project is under development) - maybe something is missing at this stage. Of course all credits are going to GerLech :)

uzadude commented 2 years ago

@kostuch, can you please PR your changes to this repo?