Hallo Zusammen!
Ich habe eine Frage zu folgender Funktion:
1 | FRESULT f_readdir (
|
2 | DIR* dp, /* [IN] Directory object */
|
3 | FILINFO* fno /* [OUT] File information structure */
|
4 | );
|
In der Dokumentation (http://elm-chan.org/fsw/ff/en/readdir.html) steht:
"When a null pointer is given to the fno, the read index of the
directory object is rewinded."
Genau das möchte ich machen, stehe da aber irgendwie voll auf der
Leitung und bin mir nicht sicher ob ich das in meinem Code richtig
verwende:
1 | FRes = f_readdir(&dir, NULL);
|
Ist das so richtig bzw. im Sinne des Erfinders?
Die f_readdir Funktion selbst reagiert auf folgendes:
1 | if (!fno) {
|
2 | res = dir_sdi(dp, 0); /* Rewind the directory object */
|
3 | .
|
4 | .
|
5 | .
|
Der Ausdruck "!fno" verwirrt mich nun vollends. Was zur Hölle ist ein
NICHT-Pointer und wie kann ich den an die Funktion übergeben? Wo ist
mein Fehler?
Der Code im Detail siehe unten, das Programm funktioniert vorerst und
macht was es soll. Sobald "page" aber den Wert 4 annimmt steht alles
still.
1 | unsigned int i, s, z, page = 0;
|
2 | char disp [4][21];
|
3 | .
|
4 | .
|
5 | .
|
6 | FRes = f_readdir(&dir, NULL); //Directorypointer Rückstellen
|
7 |
|
8 | for (i = 0; i < page; i++) { //Auf gewünschten Eintrag springen
|
9 | FRes = f_readdir(&dir, &fno);
|
10 | }
|
11 |
|
12 | for (z = 0; z < 4; z++) { //Vier Einträge lesen
|
13 | FRes = f_readdir(&dir, &fno);
|
14 |
|
15 | for (s = 0; s < 20; s++) {
|
16 | disp[z][s] = fno.fname[s];
|
17 | }
|
18 | }
|
19 |
|
20 | write_line(1, disp[0]); //Gelesene Einträge am Display ausgeben
|
21 | write_line(2, disp[1]);
|
22 | write_line(3, disp[2]);
|
23 | write_line(4, disp[3]);
|
Ich verwende einen PIC24FJ128GA202 und die MPLAB X IDE (v3.50) mit dem
XC16 Compiler (v1.30).
Vielen dank im Voraus für eure Bemühungen und schöne Grüße.