ESP8266 Speicher sparen

(deleted)

main.zip (21.3 KB)

Hallo,

wie ballert man den Speicher eines ESPxxxx zu?

Hi

Mit ESP8266 noch nicht gespielt (wenngleich ich wohl Einige davon hier als 'WLAN-Modul' liegen habe ... kam noch nicht zu ...), bei den 'Normalen' Arduino

  • Datentypen mit Sinn auswählen
  • konstante Dinge konstant machen
  • sparsam mit globalen Variablen sein
  • feste Texte per F-Macro in den Flash (kA, ob der ESP hier anders tickt)
    -- man könnte auch externe Texte woanders lagern, externes EEprom, FRam, SD-Karte, whatever

MfG

Doc_Arduino:
Hallo,

wie ballert man den Speicher eines ESPxxxx zu?

Hallo,

Oooch, könne mir dreidimensionale Array vorstellen 100x100x100x4byte könnte so gerade noch passen :wink:

Heinz

Doc_Arduino:
wie ballert man den Speicher eines ESPxxxx zu?

das frage ich mich auch.

@TO

Hätte da aber einen Tipp:
Mit einem Uno üben, da lernt man sowas schnell

(deleted)

Hallo,

aha. Vielleicht kannst du die Bilddaten in den Flash schieben. Stichwort Progmem.

(deleted)

(deleted)

Problem: der Code wird immer größer, der Speicher leider nicht. Müsste man mal beheben :D. Ich weiß natürlich dass ich sehr viel durch meine Programmier-weise sparen kann. Deswegen wollte ich mal fragen ob Ihr Tipps habt um allgemein Speicher sparend zu Programmieren.

Knuffers:
das Hab ich gemacht. Das ging solange gut bis ich mehr von meinen Hex-dateien eingefügt habe. Die ersten paar hat er normal durchgeführt beim 5. meine Ich ist er dann abgeschmiert.

das passt nicht zusammen. in #1 schreibst du dass dir der dynamische Speicher ausgeht, in #7 meinst du dass es beim migrieren in den PROGMEM Schwierigkeiten gibt und er ESP abschmiert. Du machst da etwas falsch, was wir aber nicht sehen.

PROGMEM am ESP8266: hier gibts ein paar Tipps Guide to PROGMEM on ESP8266 and Arduino IDE — ESP8266 Arduino Core 3.1.2-21-ga348833 documentation

Wenn du ALLE Tipps von postmaster aus #2 umgesetzt hast, schlage ich vor du postest mal dein Monster. Wenn du Llinks zu allen Abhängigkeiten/Libraries gesetzt hast, kann ich mir vorstellen, dass sich das jemand ansehen würde.

Hallo,

mit einer Uhr Speicherprobleme auf einem ESP8266 zu bekommen, kommt mir auch seltsam vor.
Gibt es Näheres zu dem Projekt?
3MB SPIFFS auf z.B. einem ESP8266-12 bekommt so schnell doch nicht voll und wenn doch, womit?

Gruß aus Berlin
Michael

amithlon:
3MB SPIFFS auf z.B. einem ESP8266-12 bekommt so schnell doch nicht voll und wenn doch, womit?

mit Bilder, siehe #5
Mit kommt das auch seltsam vor. Flash hat ein ESP genug. Vielleicht wird was beim auslesen falsch gemacht und dadurch der RAM zugeballert. Aber wir stochern hier nur im Nebel.

(deleted)

Knuffers:
wenn das erwünscht ist kommentiere ich meinen Code und Poste Ihn mal

Wenn du wirklich Hilfe brauchst, solltest du das ernsthaft in Erwägung ziehen!

Gruß Fips

Welche EspCore Version nutzt du?

Gruß Fips

Ich werde jetzt zwar nicht bei dir Aufkreuzen, nimm zur Sicherheit aber mal die Zugangsdaten aus der Datei raus.

Warum machst du das Time Gedöns Doppelt?

Knuffers:
Habe mir einige Seiten zu SPIFFS gespeichert nur so neben bei, falls man da noch einiges Rausholen kann

Damit solltest du dich beschäftigen.

Lesetipp

Gruß Fips

(deleted)

main.zip (25.2 KB)

nur kurz:

  1. Du hast noch viele

Serial.println("WIFI Verbindung verloren!");

ohne dem F-Makro.

im Easter-Egg, ... genau die riesen Byte-Arrays hast noch nicht in den PROGMEM verschoben, oder eben SPIFFS.

schau dir die Datentypen hat. Durchsuche deinen Code nach int. Ich habe es nicht gezählt, aber 75% deiner ints brauchen keine int zu sein. Viele kannst auf byte ändern. Jedes int prüfen ob es einen negativen Bereich und zwei Byte braucht. auch in den Funktionen und in den For-Schleifen, da reicht oft ein byte wenn ich da drüber sehe.

Variablen mit diesen Namen SCHREIEN danach auf den richtigen Datentyp überprüft zu werden:

int Stunden_Aktuell = ntpClient.Hole_Stunden();
int Minuten_Aktuell = ntpClient.Hole_Minuten();
int Sekunden_Aktuell = ntpClient.Hole_Sekunden();

P.S.: wenn du neue Variablen einführst: bitte verwende dafür am Wortanfang kleine Buchstaben.
struct und class Klassen-Namen werden üblicherweise mit einem Großbuchstaben begonnen, aber Variablen und Objekte beginnen klein.

die Variablen für die Farben Weiss etc und das array Farben ... das hast auch im RAM. Wenn sich die Werte nicht ändern auf alle Fälle const machen. Ich vermute aber, das kann der compiler trotzdem nicht wegoptimieren, daher würde ich dafür ausnahmweise #define verwenden, zum ausprobieren wäres es auf alle Fälle mal.

scroll_text(7, 30, "An sich koenntest du mich mal wieder anschreiben und sagen wie cool ich bin...", 255, 20, 147);

so richtig cool wärst du, wenn du das auch in den flash gepackt hättest

Hallo,

Combietimer gibt mir etwas Rätsel auch, ist das die aus dem µC.net?
time.h kümmert sich um den NTP, alle Stunde und wenn keine aktualisierung geht, läuft sie eben frei weiter.
Die Jungs haben sich auch viel Mühe gegeben, die läuft über Stunden auf die Sekunde genau, Laufzeitunterschiede des sysTick werden korrigiert.

Compiler läuft hier uner 1.8.12/2.6.3 durch, 2 warnings zum Variabeltyp in EsterEggs.
Flash 29&, Ram 52%, ist doch eigentlich noch nicht tragisch?

Ich werde wohl mal heute Nachmittag den KRam auf mein 64x32 Display föashen, ist sowieso recht ungenutzt hier. Ob ich einen DHT11 ranhänge, weiß ich noch nicht, muß ich sonst eben auskommentiren und einen Dummywert setzen. Temperaturen usw. werden hier sowiso von allen Sensoren per MQTT verteilt, wenn ich die anzeigen will, hole ich mir mir den gewünschten von dort.

Mal schauen, ob ich es in Gang bekomme, muß die PcMatrix noch durch meine gepatchte ersetzen, ich habe hier ein Diplay mit anderen Treiber, die haben ein etwas anderes Timing in der Ansteuerung.
MorphClock und Temperatur innen/außen ist sonst auf meiner Anzeige.

Gruß aus Berlin
Michael

dht soll egal sein, bekommst halt 0-Werte ohne Sensor.
combietimer findest manchmal im Posts von "combie".
--> TO: genau deswegen schrieb ich: LINK zu allen verwendeten Libs ergänzen, da Helfer sonst sinnlos danach suchen müssen!!!