Nabend, hab da eine spezielle frage... Bin grade fat16 für einen atmega168 am programmieren, bis jetzt ohne schreib unterstützung. flash brauch ich momentan so 4100 bytes,ram 700 bytes. Ist schon recht weit vortgeschritten, ffopen, ffclose, ffread, ffmkdir, ffcd, ffrm_file, ffseek... mein problem jetzt, ich will ordner löschen können, da muss ich aber rekrusiv löschen und alle cluster-chains, hat da mal jemand ne idee? grüße daniel
Ich kenn mich zwar mit FAT nicht sooo toll aus, aber ich vermute mal, dass du Speicherprobleme hast... Jetzt könntest du was ziemlich pöses machen: in einem oder mehreren Clustern die sowieso gelöscht werden könntest du dir die zu löschenden Clusternummern abspeichern. somit hast pro geopferten Cluster 512 Byte mehr Swap-Ram ;-) Gruß Roland
Hm, ram probleme hab ich eigentlich nicht , hat ja 1024 bytes ram der m168, da is noch was luft nach oben. Das problem ist eher, dass wenn ich z.b 100000 verschachtelte ordner habe muss ich ja in den untersten und von da an aufsteigend alles löschen quasi, mir fällt da nur nicht ein wie genau... und sowas zwischenzuspeichern ist auch nicht so super grüße daniel
ein einfacher, aber höchst ineffizienter Weg wäre, nachdem du eine Ordnerebene gelöscht hast, alles wieder zu verlassen, und wieder von vorn ein- und absteigen. Evtl. kannste Dir auch nur die letzten durchlaufenen Ordnerebenen merken, um wieder teilweise zurückgehen zu können, um in den nächsten Odner zu gehen (sozusagen nur partiell rekursiv), um das wiederholte Neueinsteigen zu reduzieren. Ansonsten ungefähr so, wie Roland Praml (pram) es vorgeschlagen hat. Anfangs wollte ich vorschlagen, einfach nur den Eintrag für den ersten Ordner zu löschen, womit ja die Referenzen zu den anderen Ordnern nicht mehr da sind. Aber ich glaube, die Cluster müssen wohl alle irgendwie als leer markiert werden, um wiederverwendet werden zu können - oder? (ist schon lange her, als ich mich mal mit der FAT beschäftigt hatte ;-)
Hallo @ JensG ja, so hatte ich das zuerst auch, nur die cluster des obersten ordners gelöscht. Dann stehen aber in der fat immer noch die einträge der dateien und unterordner, sind dann also belegt. Werd jetzt mal versuchen über die "." und ".." einträge der ordner was zu machen. was nicht geht wäre: 1. sequentiell die cluster einträge(32byte)durchgehen und die cluster-chain der dateien löschen. 2.wenn man an nen ordner kommt, in diesen wechseln und den cluster des ".." eintrags merken (damit man zurück kommt)und dann wieder zu 1. geht nicht, weil man so halt immer die ".." einträge puffern müsste also 2 byte pro unterordner, wenn die verschachtelt sind.... die fat "rückwärts" lesen geht auch nicht oder!?! den weg eine neue cluster-chain zu machen quasi eine wegbeschreibung durch die ordner die zu lö schen sind,find ich nicht gut, ich will löschen, nicht noch mehr schreiben. wie machen das denn die großen?
Ich vermute rekursiv ;-) Den aktuellen Ordner durchsuchen, ob er selbst einen Ordner gibt. Wenn ja, ruft sich die Löschroutine für diesen Ordner erneut auf. Nach der Rückkehr aus der zweiten Ebene wird weiter nach Ordnern im eigenen Ordner gesucht. Gibt es keinen Mehr, werden alle Dateien gelöscht, danach der eigene Ordner und dann die Funktion beenden, sodass die nächsthöre Ebene ausgeführt wird. Für den µC wegen dem Speicherbedarf nur bedingt geeignet, aber das weißt du ja eh schon. Was spricht gegen die ..-Einträge? Du musst dir ja nicht alle merken, sondern nur den, von dem Ordner, den du gerade löscht. Wenn du im letzen Ordner bist, merkst du dir den ..-Eintrag, löscht alle Dateien und anschließend den Ordner. Über den gemerkten ..-Entrag gehst du dann "eine Ebene höher", wo du sowieso noch den Ordner-Eintrag löschen musst. Aber egal wie viele Ebenen es Gibt: Du musst dir immer nur merken, welches der höchste zu löschende Ordner ist und eben den ..-Eintrag des Ordners, der gerade gelöscht wird. Sebastian
@ Sebastian Äh ja, da is was dran, stand etwas auf dem schlauch... Es geht ja doch so etwas wie fat rückwärts lesen, über die ..-einträge. Da steht ja der startcluster vom ordner davor und der eigene drin :) Wenn man sich die, bei jedem wechsel des ordners merkt, kann man in den untersten ordner und von da auch zurück. super, danke grüße daniel
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.