Also ja, tatsächlich deutlich besser ohne .
Das define CACHED_PLAYLIST_ENABLE könnte man in diesem Zuge auch gleich ganz raus nehmen. Ich kann mir morgen auch nochmal die originalen Zeiten zum Vergleich anschauen. Das sollte ganz spannend sein.
Gute Nacht zusammen!
Hattest du bei den Messungen Musik abgespielt? Weil die Unterschiede zu tueddy scheinen doch sehr hoch zu sein (oder nutzt du SPI). Würde mich nur interessieren, da du so große Untershiede hast. Kann natürlich auch an der SD-Karte selbst liegen .
Ohne der Cache sind die Werte aber deutlich besser (wahrscheinlich weil es einfach fixer geht den FAT32 Directory table auszulesen als die Linked List der Datei). Sehr überzeugend . Muss nur die Zeit finden meine Playlist Branch nochmal anzugreifen… RL funkt da gerade leider ein wenig dazwischen…
Messungen sind jeweils zum Start des Abspielens implementiert. Ich verwende das normale Kit ohne SPI.
Aber ich finde die Unterschiede gar nicht so gravierend. Dass das erstellen der Playlist und speichern länger dauert wenn es mehr Dateien sind und die SD nur langsam schreibt passt.
Beim lesen des Chache-Files bei ca. doppelter Anzahl an Einträgen auch etwa doppelt so lange wirkt auch plausibel.
Und beim lesen der Table ohne das Cache file ebenfalls etwa doppelt so lange bei doppelt so vielen Einträgen…
Bin sicher das die Messungen passen, die SD-Karten sind unterschiedlich schnell und befüllt, @Joe91 hat 50 Dateien, ich 24 im Ordner gehabt.
Habe das auch noch mit SPI getestet, da ist der Turbo nochmal größer. Bei SPI hatte ich mit einer stark befüllten Karten Watchdog Reset (weil das Laden des Explorer-Trees ewig gedauert hat), jetzt flutscht das.
Aus meiner Sicht ist der Playlist Cache dann obsolet. Ich werde ihn im kommenden PR aber nicht entfernen sondern nur deaktivieren…
Ich habe ein Bug / Verbesserungsvorschlag. In getNextFileName solltest du definitiv prüfen, ob du NULL bei isDir bekommen hast. Wenn es NULL ist, versuchst du Adresse 0x00 zu schreiben, generierst damit eine Exception und der Code stürzt ab.
Eine einfache Möglichkeit wäre eine Prüfung in Zeile 562 vor den Schreiben auf NULL:
name += fname;
// check entry is a directory
if(isDir) {
*isDir = (file->d_type == DT_DIR);
}
return name;
Plus die Formatierung deines neuen Codes passt nicht mit dem restlichen in der Lib zusammen (du nutzt Tabs statt Leerzeichen ).
@laszloh Danke für den Hinweis, hab’s aufgenommen.
Huhuhu, es gibt gute Chancen das diese Funktion Teil des nächsten Arduino Release wird. Mein Pull-Request ist bereits „approved“. Könnte also mit 2.0.8 kommen, bis dahin kann man aber auch gut mit der angepassten FS Bibliothek leben
@laszloh Vielen Dank für die Code-Review, hast ja noch einen Bug gefunden!
Keine Ahnung warum in der Historie da Änderungen in der Readme angezeigt werden. Vermute das kam durch ein Sync vom Dev-Branch und Torsten hatte diese Datei aktualisiert.
Am Ende taucht die aber nicht mehr auf und ist synchron zur aktuellen Readme:
Tolle Arbeit. Seit einigen Tagen habe ich es laufen und ich hoffe es kommt noch in den Master bevor ich nächste Woche die Box meiner Enkelin zum Update erhalte. Cached_Playlist ist deaktiviert und ich denke auch nicht mehr erforderlich. Gefühlt ist da kein Unterschied.