Martin Thomas schrieb:
> wie ist _USE_STRFUNC definiert?
Bingo! Das ist 0. Und somit disabled. Danke, danke, DANKE! Nun
compiliert er.
Hab mir das nun mal angeschaut, bin verwundert. Ich habe im Internet nun
eine andere "Version" von ff.h gefunden. Dort steht das so:
1 | #if _USE_STRFUNC
|
2 | int f_putc (int, FIL*);
|
3 | ...usw...
|
Dies ist in meinem ff.h nicht der Fall. _USE_STRFUNC kommt erst in der
Implementierung in ff.c zum tragen (und wird definiert in ffconf.h).
Eine Frage stellt sich mir deshalb nun aber doch noch. Hier mal die
Implementierung:
1 | int f_putc
|
2 | (
|
3 | CHAR c, /* A character to be output */
|
4 | FIL* fil /* Pointer to the file object */
|
5 | )
|
6 | {
|
7 | UINT bw, btw;
|
8 | BYTE s[3];
|
9 |
|
10 |
|
11 | #if _USE_STRFUNC >= 2
|
12 | if (c == '\n') f_putc ('\r', fil); /* LF -> CRLF conversion */
|
13 | #endif
|
14 |
|
15 | #if _LFN_UNICODE /* Write the character in UTF-8 encoding */
|
16 | if (c < 0x80) { /* 7-bit */
|
17 | s[0] = (BYTE)c;
|
18 | btw = 1;
|
19 | } else {
|
20 | if (c < 0x800) { /* 11-bit */
|
21 | s[0] = (BYTE)(0xC0 | (c >> 6));
|
22 | s[1] = (BYTE)(0x80 | (c & 0x3F));
|
23 | btw = 2;
|
24 | } else { /* 16-bit */
|
25 | s[0] = (BYTE)(0xE0 | (c >> 12));
|
26 | s[1] = (BYTE)(0x80 | ((c >> 6) & 0x3F));
|
27 | s[2] = (BYTE)(0x80 | (c & 0x3F));
|
28 | btw = 3;
|
29 | }
|
30 | }
|
31 | #else /* Write the character without conversion */
|
32 | s[0] = (BYTE)c;
|
33 | btw = 1;
|
34 | #endif
|
35 | f_write(fil, s, btw, &bw); /* Write the char to the file */
|
36 | return (bw == btw) ? 1 : EOF; /* Return the result */
|
37 | }
|
Wenn mich mein Verstand (oder meine C-Kenntnisse) nun nicht komplett
verlassen, müsste er doch auch mit _USE_STRFUNC = 0 compilieren? Wenn
_LFN_UNICODE nämlich den #else (write the character without conversion)
Zweig, oder? Er prüft ja nicht ungleich 0 sondern <=2?
Nun muss ich mir nur noch überlegen, welche Konvertierung/ob ich eine
brauche und _USE_STRFUNC bzw. _LFN_UNICODE richtig setzen.