Datum: 15.05.2008 23:55
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
Datum: 16.05.2008 00:01
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
Datum: 16.05.2008 00:08
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
Datum: 16.05.2008 00:33
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 ;-)
Datum: 16.05.2008 13:02
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?
Datum: 16.05.2008 13:21
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
Datum: 16.05.2008 14:31
@ 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
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel


