Forum: Mikrocontroller und Digitale Elektronik ElmChan LFN f_open


von andre (Gast)


Lesenswert?

Hallo,
Ich Arbeite mit der FatFs Lib von ElmChan les funktioniert.

So wenn ich aber ein Textfile öffnen möchte "uartconfig.txt" wird die 
Datei nicht geöffnet.

kann mir einer weiterhelfen.
mfg
1
 char by;
2
 char rw_buffer[30];
3
 char rw_data[11]; 
4
5
 UINT br;         // File write count 
6
 FIL fsrc;        // file objects
7
 FRESULT res;     // FatFs function common result code
8
9
10
 static char lfn[_MAX_LFN + 1];
11
 fno.lfname = lfn;
12
 fno.lfsize = sizeof lfn;
13
14
res = f_open(&fsrc, "uartconfig.txt" ,   FA_OPEN_EXISTING | FA_READ);

von Kristallkugel (Gast)


Lesenswert?

Layer 8 Fehler in Zeile 42.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Funktion f_open hat einen Rückgabewert, den Du einer Variablen "res" 
zuweist.

Was steht denn da drin?


Und welche Bedeutung sollen die drei Codezeilen vor dem Aufruf von 
f_open haben?

von andre (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Die Funktion f_open hat einen Rückgabewert, den Du einer Variablen
> "res" zuweist.
>
> Was steht denn da drin?
Da steht drin das das File nicht gefunden wurde.

>
> Und welche Bedeutung sollen die drei Codezeilen vor dem Aufruf von
> f_open haben?

Damit ist denn LFN Active

von andre (Gast)


Lesenswert?

Wenn der Filename zb uartcfg.txt also 8.3 dann kann ich es öffnen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Na, dann scheinen Deine drei Zeilen wohl nicht die gewünschte Auswirkung 
zu haben.

von M. Н. (Gast)


Lesenswert?

andre schrieb:
>>
>> Und welche Bedeutung sollen die drei Codezeilen vor dem Aufruf von
>> f_open haben?
>
> Damit ist denn LFN Active

Nein.
LFN aktiviert man in der ffconf.h.

Die Struktur fno ist wahrscheinlich eine FILE info struct (selber 
Variablenname wie in allen Beispielen). Die hat damit nichts zu tun. Was 
soll das schreiben einer zufälligen Struktur auch bringen.


Bei mir steht in der ffconf.h:
1
#define _CODE_PAGE  850
2
#define  _USE_LFN  1
3
//  0: Disable support of LFN. _MAX_LFN has no effect.
4
//   1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
5
//   2: Enable LFN with dynamic working buffer on the STACK.
6
//   3: Enable LFN with dynamic working buffer on the HEAP.
7
#define  _MAX_LFN  255
8
#define  _LFN_UNICODE  0

Ohne unicode mit OEM Page 850 (Latin1) und statischem working buffer 
gehts bei mir.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

M. H. schrieb:
> OEM Page 850 (Latin1)

Pedanterie:
850 ist nicht "Latin1", sondern eine leicht angepasste Variante der 
alten "DOS"-Codepage 437. "Latin1" ist 1252.

von Kai (Gast)


Lesenswert?

Moin,

Vollständiges Programm?

Da fehlt doch mindestens noch ein fmount? Und diskinitialize?

Gruß

von M. Н. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Pedanterie:
> 850 ist nicht "Latin1", sondern eine leicht angepasste Variante der
> alten "DOS"-Codepage 437. "Latin1" ist 1252.

Ja. Das war mir immer relativ egal, solange alles funktioniert hat.
<offtopic>
Wenn man in Japan ein Windowssystem benutzt, sind alle Backslashes in 
den Pfaden durch Yen-Zeichen ersetzt. Aber wenn man das Yen-Zeichen 
manuell eingibt, ist das ein anderes Unicodezeichen. Und alle leben 
damit, dass das System von Natur aus "broken" ist. Unglaublich...
</offtopic>

Kai schrieb:
> Da fehlt doch mindestens noch ein fmount? Und diskinitialize?
Pedanterie:
disk_initialize wird von f_mount ausgeführt. Hierarchisches Design und 
so...

Wenn er sich nicht mehr meldet, hat er die Lust verloren oder es geht 
jetzt :)

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.