Skip to content

Excesive RAM utilisation #6

@kostuch

Description

@kostuch

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions