Liebe Kollegen, ich habe mit einem ESP32 eine Messwerterfassung entwickelt und erfasse damit für maximal eine Minute alle 5ms 8 analoge Messwerte, welche in weiterer Folge auf einer SDKarte gespeichert werden. Allerdings schafft die SD Karte diese 96.000 Messwerte nicht in Echtzeit, sondern hinkt ein wenig nach ! Jetzt möchte ich euch bitte fragen - ich brauche kein fertiges Programm, es genügt ein ja oder nein - ob FreeRTOS ein Ansatz sein kann, diese Verzögerung zu eliminieren ?
Hallo die Frage ist doch, woran es hakt! Ein RTOS ist kein Turbolader der macht auf Grund zusätzlicher Software alles eher langsamer. Check doch mal selber, wo es hakt. Ich schätze bei deiner SD-Karte. Wie betreibst du die? Im SPI-Modus oder im SD-Modus? Wie schel ist die Karte? Und wie oft beschreibs du die? Und mit FAT-FS oder selbergestrickt? Gruß Gerhard
Wie dem auch sei, weniger als 100 kB pro Minute (nicht Sekunde) sollte jede SD Karte mit Leichtigkeit schaffen. Dein Problem ist vielleicht eher, dass SD Karten zwischendurch mal mit sich selbst beschäftigt sind und dabei zahlreiche Takte verbraten. Typischerweise dauern diese pausen bis zu 200ms. Dagegen kann man nichts machen, außer mit entsprechend viel RAM zu puffern.
Andreas S. schrieb: > Liebe Kollegen, > > ich habe mit einem ESP32 eine Messwerterfassung entwickelt und erfasse > damit für maximal eine Minute alle 5ms 8 analoge Messwerte, welche in > weiterer Folge auf einer SDKarte gespeichert werden. > Allerdings schafft die SD Karte diese 96.000 Messwerte nicht in > Echtzeit, sondern hinkt ein wenig nach ! > Jetzt möchte ich euch bitte fragen - ich brauche kein fertiges Programm, > es genügt ein ja oder nein - ob FreeRTOS ein Ansatz sein kann, diese > Verzögerung zu eliminieren ? Mal abgesehen von der Tatsache das 1600 Messwerte pro Sekunde (bei vermuteten 2Bytes pro Wert) also 3,2kB/s schon deutlich in Richtung Fußgängergeschwindigkeit deuten… Wenn das FAT-Dateisystem derart lahmarsc.ig operiert, sollte man die Messwerte im RAM zwischenspeichern und anschließend (oder IRQ-basierend während der Erfassung) auf die SD-Karte tröpfeln.
Andreas S. schrieb: > Echtzeit Also der Schreibvorgang dauert länger als 5ms und Du verlierst Daten? DMA benutzen oder den zweiten Kern im Hintergrund die Daten wegschaufeln lassen?
Nebenbaustelle: Hat das Ding nicht Funk (WLAN)? Das sollte die Werte sogar mit Waldorf-Protokoll (Singen, Klatschen und Tanzen) übertragen können.
Ein ähnliches Problem hatte ich mit dem ESP32 auch. Meine Lösung: Alles in einem RAM Buffer packen (Core1) und wenn due eine Blockgröße voll hast wird die SD Karte mit Core2 geschrieben Super einfach und schnell. Sicherlich nicht gerade effizient oder Resourcensparend, aber was solls. Erfüllt seinen Zweck.
Hey Andreas, wie schreibst du denn auf die SD Karte (Anzahl Pages / Buffergröße)? SPI oder SDMMC/SDIO? Nur um es nochmal nachzurechnen: (Die ADC haben ja 12Bit soweit ich es richtig gesehen habe) 5ms (200x/Sek) * 8 Ch. * 2 Byte = 3200 Byte/Sek. Das wären 6,25 Pages (je 512 Byte) / Sek. Was mir dazu einfällt: Bei mir war es so, dass Schreibvorgänge mit je 512 Byte langsamer waren als z.B. immer ein Buffer mit 4 Pages (2048 Byte) zu schreiben.
Liebe Kollegen, Vielen Dank für eure Tipps. Ich werde eure Anregungen gerne berücksichtigen und euch vom Ergebnis berichten !
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.