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.
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.
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.
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.
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.
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.
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.