Directory FAT16/32 anzeigen

  • 1
  • 2
  • Page 1 of 2
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Directory FAT16/32 anzeigen

 · 
Posted: 08.01.2017 - 18:20  ·  #1
Hallo,

heute habe ich eine "wie macht ihr das"-Frage: Ich möchte auf einem LCD das Directory einer SD-Karte anzeigen und daraus eine Datei auswählen und öffnen. Wie ich das Directory bekomme ist klar: FindFirst/FindNext. Damit ist aber der Record tSearchRec immer mit der zuletzt gefundenen Datei belegt und es gibt ja kein FindPrev (vorige Datei) um im LCD nach oben zu scrollen. Also muß ich wirklich alle (!) Dateinamen des aktuellen Verzeichnisses zwischenspeichern?

Gruss
Harry
Harald_K
 
Avatar
 
Subject:

Re: Directory FAT16/32 anzeigen

 · 
Posted: 08.01.2017 - 19:04  ·  #2
eigentlich müßtest du alle Dateinamen aller Verzeichnisse zwischenspeichern -

wenn du rückwärts gehen willst kommt nämlich unweigerlich die Forderung nach ".." - sprich eine Dir-Ebene zurück.

liegt einfach daran, daß du nicht weißt, welches der vorige Block in der FAT-Liste ist, die FAT ist nur vorwärts verkettet.
Noch komplexer wirds durch lange Dateinamen, die ja mehr als einen DIR-Eintrag belegen und dann noch zusätzlich den 8:3-kompatiblen Eintrag mit Name ~ nummer - da weißt du im prinzip nicht, wieviele Einträge du zurückmußt, ggf. über Blockgrenzen hinweg ...

ggf. ginge es mit ner Liste aller Blocknummern wo DIR-Einträge drin sind, aber auch da müßtest du die Vorwärtsverkettung mit speichern und die Rückwärtsverkettung selber dazubasteln ...

verpaß dem atmel einfach ein paar megabyte RAM, dann funzt das auch mit solchen Sachen ... ;)
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Directory FAT16/32 anzeigen

 · 
Posted: 08.01.2017 - 20:19  ·  #3
Hallo Harald,

so schlimm? :( .... Ich entschärfe meine Forderung mal insoweit, daß ich nur in der Root arbeite. Keine Verzeichniswechsel.
Ich muß wohl einfach nur mal damit spielen und auf weitere Tips hoffen :)

Gruss
Harry
Harald_K
 
Avatar
 
Subject:

Re: Directory FAT16/32 anzeigen

 · 
Posted: 08.01.2017 - 20:49  ·  #4
bei FAt16 seh ich noch ne Chance, weil da das Rootdir an ner definierten Stelle liegt und ne feste Länge hat - sobald du FAT32 nimmst ist das Verzeichnis irgendwo auf der Platte in beliebigen Blöcken verteilt und nur über die FAT erreichbar ...

Ich hab auch schon damit gekämpft, als ich meine selbstgeschriebene FAT16 für SD-Karte programmiert hab - ich erlaube nur "nächste Datei" und "Abbruch" - mehr ist zu kompliziert.

ein DIR-Eintrag besteht aus 32 Bytes,
die kurzen Dateinamen beginnen mit 11 Zeichen Datei/Ext, dann kommen Blockzahl, FAT-Block, Datum etc - 32 Bytes zusammen

die langen aus "Namensschnipseln" zu 8 Zeichen, so auf 32Bytes aufgefüllt daß es nicht verwechselt werden kann und ner Kennung für den letzten Schnipsel, dann noch ein kurzer Eintrag mit den benötigten Blockangaben um die Datei auch zu finden.
grad bei langen Namen kriegst du z.B bei LCDs noch das Prob mit der Zeichenzahl in der Anzeige ...

zum Thema FAT und DIR - wikipedia.de und "FAT16" durchlesen .. .
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Directory FAT16/32 anzeigen

 · 
Posted: 08.01.2017 - 22:17  ·  #5
Ich weiß wie die FAT funktioniert, hab ja schliesslich zu DOS-Zeiten mit den Norton Utilities (Disk Editor) genug drin rumgebogen :D.
Ich denke ich werde beim Programmstart eine maximal erlaubte Anzahl Dateinamen (ca. 30) einlesen und zwischenspeichern und damit meine Displayauswahl realisieren. Ich hab nen Mega1284 (ja Rolf keinen XMega :D wegen 5V-Peripherie) und sollte somit genug RAM dafür haben.
(8+3)*30=330Byte ...... da geht sogar noch mehr.

Gruss
Harry
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: Directory FAT16/32 anzeigen

 · 
Posted: 09.01.2017 - 22:23  ·  #6
Hi Harry,
das ist natürlich die Holzhammer Methode :)
Eleganter ist es doch sich den "letzten" Eintrag zu merken und bei einem Key Up sucht man einfach wieder von vorne bis zum letzt gemerkten Namen. Den davor muss man sich dann immer zwischenspeichern. Das belegt halt nur zwei FileRecs.
Das Suchen von Anfang an kostet doch nichts ?
Und wenn sich während der bedienung eh nichts ändert dann ganz flott per Index zählen und gut.

Gruß
miparo
Harald_K
 
Avatar
 
Subject:

Re: Directory FAT16/32 anzeigen

 · 
Posted: 09.01.2017 - 23:26  ·  #7
Nur mal angemerkt
- fast alle Leute sind es gewöhnt, daß bei solchen angezeigten Dateinamenlisten die Dateinamen schön alphabetisch sortiert sind ...

die stehen aber so nicht auf dem Datenträger, wenn man also mit findfirst und "*.*" lossucht kriegt man ein eher ungewohntes Durcheinander ...

ansonsten ist die Idee mit dem letzten gemerkten Namen speichermäßig auszuhalten, lediglich die Zugriffszeiten werden etwas länger ...
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: Directory FAT16/32 anzeigen

 · 
Posted: 10.01.2017 - 12:53  ·  #8
Klaro, davon stand in der Frage aber nichts o.O

Gruß
miparo
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 13   134   147 · Page-Gen-Time: 0.049278s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI