Forum: Mikrocontroller und Digitale Elektronik Esp32 ram program Fragen


von Klaus (Gast)


Lesenswert?

Hallo,
Für ein WLAN System wollte ich was mit einem esp32 machen. Das ganze 
habe ich ohne WLAN oder ETH zurzeit auf einem stm32f4 über USB am 
laufen.
Der RAM (168k)und Flash (560k) Verbrauch ist aktuell schon recht hoch 
und wird noch steigen.

So wenn ich mir nun die Datenblätter vom esp32 anschaue dann steht da 
was wie 400k RAM 200k rom und 4 MB Flash. Also wenn ich das einfach 
vergleichen würde dann müsste es passen, aber da der esp32 ja 
anscheinend das Programm ins RAM hohlt würde es nicht passen.

Was ist denn nun richtig?
Habe ich das ram voll zur Verfügung oder was will der Prozessor für den 
Code?
Die Doku dazu ist irgendwie da nicht so hilfreich, oder das richtig 
Dokument habe ich noch nicht gefunden.

von Stefan F. (Gast)


Lesenswert?

Klaus schrieb:
> Der RAM (168k)und Flash (560k) Verbrauch ist aktuell schon recht hoch
> und wird noch steigen.

Wenn das wirklich so ist, und nicht das Resultat mangelhafter Struktur, 
dann scheint mir für deinen Fall ein Raspberry Pi (oder ähnlich) eher 
geeignet zu sein.

Soweit ich weiß, begrenzt die Toolchain den Programmcode auf maximal 1,2 
Megabytes. Wie viel RAM frei ist, weiß ich nicht.

von EAF (Gast)


Lesenswert?

Arduino sagt bei einem kleinen Testprogramm:

> Der Sketch verwendet 230565 Bytes (17%) des Programmspeicherplatzes. Das Maximum 
sind 1310720 Bytes.
> Globale Variablen verwenden 16212 Bytes (4%) des dynamischen Speichers, 311468 
Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.

von Klaus (Gast)


Lesenswert?

Mal langsam, da muss ich erstmal mitkommen.

Das Rom ist fest und hat viele Routinen für WLAN usw fest drin.
Spart viel Code und viele Fehler.

Flash da ist mein Programm drin, und je nach Typ sind 0-8 MB da.

Psram haben einige Typen, wird aber nicht für high-speed Zugriffe gut 
sein.

So und nun das große Fragezeichen das RAM. Da werden meine Variablen, 
stack und??? drin sein.
Ist da nun code drin und wenn ja wieviel? Alles oder nur ein Teil ( zB. 
Ein Cash).
Die Struktur ist sauber und geht nicht kleiner, da soll sogar noch mehr 
rein.

Was auch noch offen ist bei mir ist das ich für einen 2. Anwendungsfall 
die i2s Schnittstelle brauche und irgendwie habe ich gelesen das Psram 
und Flash etliche Pins blockieren, ist das so?

Ein rpi ist das dein Ernst?
Ein System was von sd Karte läuft, groß und kein WLAN drauf hat.
Zusätzlich würde in meinem Fall alleine der Platz und die 
Versorgungsspannung nicht passen.

von piffpoff (Gast)


Lesenswert?

Wie gross das Programm sein kann ist doch von der 
Partitionierungstabelle abhängig, oder? Welche toolchain beschränkt auf 
1.2MiB?

Von nem aktuellen Projekt von mir:
RAM:   [==        ]  23.9% (used 78424 bytes from 327680 bytes)
Flash: [=====     ]  45.6% (used 956442 bytes from 2097152 bytes)

Bei
# Partitions.csv
# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x009000, 0x005000,
otadata,  data, ota,     0x00e000, 0x002000,
app0,     app,  ota_0,   0x010000, 0x200000,
app1,     app,  ota_1,   0x210000, 0x200000,
spiffs,   data, spiffs,  0x410000, 0x800000,

Aber wenn man kein OTA update braucht, dann kann mann ja app1 auch 
weglassen.

Ja, es sind recht viele pins schon von Flash und PS-Ram genutzt.
Muss man echt vorsichtig sein.

Wenn du code aus de ram ausfuehren willst musst du das selbst machen.
Die shadowmemories und caches sind afaik nicht nach aussen hin memory 
gemapped. Aber nicht 100% sicher.

von Klaus (Gast)


Lesenswert?

Ich muss wohl erstmal die IDE installieren und selber testen.
Auch wenn am Ende heraus kommt das der esp32 so nicht funktioniert, als 
WLAN Knoten wird er auf jeden Fall gehen.

Der Code wird doch wohl nicht aus dem Flash laufen, der ist doch nicht 
voll am Prozessor Bus dran. Genauso wie das PSRAM.
Wenn ich dich aber richtig verstanden habe dann hat der einen eigenen 
cache und somit sollte ich also das ganze ram für mein programm haben.

von Stefan F. (Gast)


Lesenswert?

Klaus schrieb:
>das große Fragezeichen das RAM.
> Da werden meine Variablen, stack und??? drin sein.

und Heap

> Ist da nun code drin und wenn ja wieviel? Alles oder nur ein Teil ( zB.
> Ein Cash).

Der Programmcode wird Blockweise ins RAM geladen, bevor und während er 
ausgeführt wird. Wie viel, ist konfigurierbar, deswegen nennt das 
Datenblatt keine konkreten zahlen.

> Die Struktur ist sauber und geht nicht kleiner, da soll sogar noch mehr
> rein.

Deswegen habe ich dir einen kleinen Computer empfohlen, der dafür genug 
Platz frei hat.

> Was auch noch offen ist bei mir ist das ich für einen 2. Anwendungsfall
> die i2s Schnittstelle brauche und irgendwie habe ich gelesen das Psram
> und Flash etliche Pins blockieren, ist das so?

Ja ist so.

> Ein rpi ist das dein Ernst?
> Ein System was von sd Karte läuft, groß und kein WLAN drauf hat.

Viele Modelle haben WLAN On-Board. Wenn dir die SD Karte nicht gut genug 
ist, warum dann der serielle Flash Chip des ESP32 Moduls? Oder meinst du 
dass das Linux ständig auf die SD Karte schreibt? Das ist ein 
Aberglaube, der sich hartnäckig hält. Wenn da jemand zu häufig auf die 
SD Karte schreibt, dann sind es Anwendungsprogramme die du zum 
Minimal-Setup hinzufügst. Selbst das kann man z.B. unterbinden, indem 
man den Programmen stattdessen eine RAM Disk bereit stellt, wenn es denn 
sein muss.

Ich hatte einen Raspberry Pi 3B+ (als Set mit Gehäuse, Netzteil und SD 
Karte, original von der Raspberry Foundation) drei Jahre lang im 
Dauerbetrieb. Er hatte die Aufgabe, die Verfügbarkeit von 10 Web 
Diensten zu kontrollieren und protokollieren. Da wurde alle paar 
Sekunden die SD Karte beschrieben, und es gab auch ein paar 
Stromausfälle. Das alles lief die ganze Zeit ohne ein einziges Problem 
durch. Also: Ständige Schreibzugriffe müssen nicht zwangsläufig ein 
Problem sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.