INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Speicherprobleme auf dem ESP32
24.01.2020, 11:18
Beitrag #1
Speicherprobleme auf dem ESP32
Ich bin momentan dabei, das Tonuino-Projekt auf einen ESP32 zu portieren. Also portieren ist nicht ganz richtig: Ich greife zwar das Grundkonzept auf, habe aufgrund anderer Hardware und anderer Schwerpunkte jedoch einen anderen Ansatz gewählt und letztlich hatte ich auch einfach mal wieder Lust, ein größeres Projekt selbst zu programmieren. Dabei bin ich schon auf verschiedene Probleme gestoßen, aktuell habe ich jedoch eines (bzw. mehrere), bei denen ich etwas konzeptionellen Input bräuchte.

Kurze Projektbeschreibung
Und zwar sieht das Konzept derweil so aus, dass ich einen ESP32 habe, der in Software mp3s und aac dekodiert. Die Musik stammt einerseits aus Webstreams, primär jedoch von einer SD-Karte. Der Reader dazu ist per SPI angebunden. Welche Musik laufen soll, steuert man mit RFID-Karten. Dh ich lese über einen RFID-Reader (via SPI) die IDs von RFID-Karten aus und suche dann im NVS des ESP32, ob eine Aktion dazu hinterlegt ist. Ist das der Fall, so spiele ich zB eine Datei von SD-Karte via I2S über einen DAC mit ClassD-Amp (MAX98357A) ab. Steuern kann man die Musik (nächster, vorheriger Titel und Pause) auch über drei Tasten, via Drehencoder kann man die Lautstärke ändern und den Player aus- und einschalten. Auch via MQTT hat man viele Steuerungsmöglichkeiten. Neue Musik kommt per FTP drauf. An der Möglichkeit, dass man die Zuweisung zwischen RFID-ID und Aktion (wird abgespeichert im NVS) über eine Webgui machen kann, arbeite ich noch. Mit GUIs habe ich es nicht so und da breche ich mir ein bisschen einen ab (aber soll hier nicht das Thema sein) :-) Also war viel Arbeit aber grundsätzlich läuft das alles. Achso: RFID-Scanning und mp3-Decoding läuft jeweils in separaten RTOS-Tasks (falls das von Belang ist).

Probleme
Eines meiner Ziele war, dass ich per OTA flashen kann. Hat allerdings nie geklappt, da der ESP beim Starten immer in einen Bootloop gegangen ist. Habs hinten angestellt. Vorgestern wollte ich via Festled-Lib noch einen Neopixelring (WS2812) einbinden und da ist das Gleiche wieder passiert. Wieder hinten angestellt. In beiden Fällen konnte ich mit dem dekodierten Stacktrace nichts anfangen. Gestern habe ich ein neues uint8_t-Statusflag im globalen Kontext gebraucht und bin wieder in einer Bootloop gelandet. Erst dann bin ich stutzig geworden und auf mein eigentliches Problem gestoßen: Der RAM ist voll. Ich habe dann verschiedene Strings nach Progmem verschoben und ein paar Variablen verkleinert; hat die größte Not erstmal gelindert.
Noch eine Info: Programmspeicher ist knapp 25% voll, die Flash-Partition (1,2 MB) ca. 88%.

Fragen
1) Im laufenden Betrieb habe ich, wenn Musik läuft, etwa 100 kB Heap frei. Vielleicht habe ich das Konzept nicht verstanden, aber sind die globalen Variablen nicht auch Heap? Also wie kommt es, dass es beim Booten knallt, im Betrieb aber schon noch Reserven vorhanden sind? Vielleicht ne dumme Frage, aber ich stelle sie jetzt einfach mal.
2) Platformio bietet ein Analyse-Tool, welches sagt, dass mein Ram 100% voll ist. Tatsächlich sind es 320k und laut dem Tool belege ich >380k. Wie kann das sein? Also ich würde gerne mal sehen, wie voll der Ram wirklich ist. getFreeHeap() bringt mich nur leider nicht weiter, weil da ist genug Platz. Tipps?
3) Wenn ich den Neopixelring (16 Bit) laufen habe, kann ich auf die SD-Karte nicht mehr zugreifen. Je nach Lib kann die Karte schon gar nicht initialisiert werden oder alternativ werden Dateien/Ordner nicht gefunden. Ne kurze Recherche (musste um eins dann irgendwann auch mal ins Bett, hehe) ergab, dass die Fastled-Lib es via SPI versucht. Hier ist es aber so, dass ich beide SPI-Instanzen bereits belegt habe (Rfid und SD). Mit der Adafruit-Lib kam ich etwas weiter; also es hat zumindest mal was geleuchtet, aber auch da kam ich im Anschluss nicht mehr auf die SD drauf. Mir ist jetzt unklar, ob die Libs in die bestehende SPI-Kommunikation reinhauen, durch eigene ISRs irgendwelche Zeitabläufe kaputt machen oder ob das PWM der LEDs vielleicht irgendwas Anderes stört. Ist vielleicht jmd. hier, der da irgendwelche Erfahrungen hat?

Also wie gesagt: Meine Fragen sind eher konzeptioneller Natur. Mir geht's weniger um konkreten Code.

Danke im voraus.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2020, 15:28
Beitrag #2
RE: Speicherprobleme auf dem ESP32
Punkt 3 hat sich erledigt. Weiß nicht mehr, was der Grund war. Entweder Speicherknappheit oder, dass ich zu "wilde" Sachen darstellen wollte. Habe ich auf jeden Fall in den Griff bekommen und läuft auch mit 24 Bit-Neopixel.

Für die ersten beiden Punkte habe ich weiterhin keine Lösung. Für den Ersten jedoch zumindest insofern einen Workaround, dass ich Speicher anderweitig freimachen konnte.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP32+SIM808 GPS Daten auslesen und auf LCD reinhard-adam 2 54 Gestern 18:25
Letzter Beitrag: georg01
  Fehler bei Board AI Thinker ESP32-CAM Manny 4 375 30.08.2020 16:37
Letzter Beitrag: Manny
  ESP32 Ethernet shrimps 33 22.285 27.08.2020 15:05
Letzter Beitrag: biologist
  ESP32 Dev Kit 4711engel 12 947 26.08.2020 08:41
Letzter Beitrag: 4711engel
  Esp32 FIFO-Problem miq19 7 586 22.08.2020 14:33
Letzter Beitrag: miq19
  ESP32 CAM Programmierung nicht möglich Manny 3 643 31.07.2020 16:04
Letzter Beitrag: Manny
  ESP32 T-Watch 2020 Lilygo AnFi 8 1.580 31.07.2020 15:35
Letzter Beitrag: amithlon
  Warum stürtzt der ESP32 manchmal ab...ein Gedankenaustausch Pertho 6 934 28.07.2020 17:38
Letzter Beitrag: hotsystems
  ESP32 Watchdog Funktion KlaRa 16 2.110 22.07.2020 09:38
Letzter Beitrag: KlaRa
  ESP32 überträgt nicht alle Datein aus dem SPIFFS Pertho 11 1.446 21.07.2020 21:46
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste