Forum: Mikrocontroller und Digitale Elektronik Chan's FatFs LFN File wird nicht gefunden


von Markus (Gast)


Lesenswert?

Ich beschäftige mich derzeit mit Chan's FatFs. Die Anbindung an das 
externe Flash funktioniert, ich habe auch erfolgreich erste Tests mit 
Short Filenames (8.3) durchgeführt. Die Umstellung auf LFN ging dann 
nicht mehr so reibungslos... leider. Ich habe folgende Konfiguration 
(benutze einen ARM MCU):
#define  _FS_TINY    1
#define _FS_MINIMIZE  0
#define  _USE_STRFUNC  0
#define  _USE_MKFS    1
#define _CODE_PAGE  1250
#define  _USE_LFN  1
#define  _MAX_LFN  32

Ich benutze dabei keine SD-card, sondern nur das externe Flash auf 
meinem Board. D.h. ich erzeuge die LFN Files intern:

f_open(&m_file, "Testfile1.class", FA_CREATE_ALWAYS | FA_WRITE | 
FA_READ);

Soweit so gut, aber wenn ich danach ein fopen() durchführen möchte, wird 
dieses File nicht mehr gefunden.

Kennt sich jemand mit dem FatFs diesbezüglich aus bzw. hat schon 
ähnliche Erfahrungen gemacht? Ich hab nur schon mehrmals gelesen, dass 
dieser Source Code nicht über alle Zweifel erhaben sein soll...

Danke für eure Hilfe!

Grüsse
Markus

von Markus (Gast)


Lesenswert?

In diesem Zusammenhang bin ich auf folgende Codezeilen gestossen:

if (sn[NS] & NS_LFN) {  /* When LFN is to be created, reserve an SFN + 
LFN entries. */
   for (ne = 0; lfn[ne]; ne++) ;
   ne = (ne + 25) / 13;
} else {    /* Otherwise reserve only an SFN entry. */
   ne = 1;
}

Was macht der for-Loop für einen Sinn?

von Martin M. (capiman)


Lesenswert?

Schau Dir mal den Abschnitt "Organization" unter
http://home.teleport.com/~brainy/lfn.htm
an. Der lange Filename muss irgendwo abgelegt werden.
Dies wird durch mehrere (Art Dummy-Einträge) im
Verzeichnis realisiert. Jeder Eintrag enthält ein Stück des
langen Filenamens.

Die for-Loop ist nur ein strlen(lfn).
Damit und mit der Berechnung wird die Anzahl der
nötigen Einträge für einen langen Namen im Verzeichnis bestimmt.

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
Noch kein Account? Hier anmelden.