Guten Morgen,
Ich arbeite mit der Lib von Roland Riegel und hänge schon fast eine
Woche fest.
Ich möchte einen Datenlogger realisieren, der verschiedene Teile misst
und für jedes Teil eine Datei anlegt. Also jede Datei braucht ein
"eigenes" file_entry.
Problemtatisch ist für mich im Moment, dass der Datenlogger dazwischen
auch ausgeschalten werden kann. Also brauche ich eine Abfrage um zu
erkennen, dass ein file_entry schon genutzt wird.
Ich habe ein Array von file_entrys:
1 | struct fat_dir_entry_struct file_entry[10];
|
Nach zwei verschiedenen Ansätzen kam mir es am vielversprechendesten vor
eine Abfrage zu machen ob die Datei geöffnet werden kann. wurde auf
diesem file_entry noch keine Datei erstellt kann sie auch nicht geöffnet
werden, dache ich. Das geht aber anscheinend doch.
Ich gebe zu die Abfrage ist ein bisschen umständlich geworden.
Die Uart-Funktionen dienen zum debuggen.
Am Terminal erhalte ich viele "s" aus der else-Bedingung.
In fat_open_file hatte ich zwei Leds blinken. Diese Funktion läuft also
tatsächlich durch und liefert einen fd-Wert zurück.
Kann mir bei diesem Problem jmd helfen. Vielleicht bin ich mit der
Anfrage auch total falsch und es geht doch anders aber das erschien mir
der beste Weg.
Gruß,
Anna
1 | messung()
|
2 | {
|
3 | //Messwerte erfassen und speichern
|
4 | messwerte();
|
5 |
|
6 | //Dateiname erstellen
|
7 | dateiname();
|
8 |
|
9 | while(1)
|
10 | {
|
11 | fd = fat_open_file(fs, &file_entry[fentry]);
|
12 | if(!fd)
|
13 | {
|
14 |
|
15 | //Datei erstellen
|
16 | if(!fat_create_file(da, filename, &file_entry[fentry]))
|
17 | {
|
18 | LED_RED(1);
|
19 | }
|
20 |
|
21 | // open file
|
22 | fd = fat_open_file(fs, &file_entry[fentry]);
|
23 | if(!fd)
|
24 | {
|
25 | //rote LED Leuchtet
|
26 | LED_RED(1);
|
27 | //continue;
|
28 | }
|
29 |
|
30 | sd_raw_sync();
|
31 |
|
32 | //write to file
|
33 | if(fat_write_file(fd, (uint8_t*) messwert, sizeof(messwert)) != sizeof(messwert))
|
34 | {
|
35 | //Rote LED leuchtet
|
36 | LED_RED(1);
|
37 | //continue;
|
38 | }
|
39 |
|
40 | //Datei schließen
|
41 | fat_close_file(fd);
|
42 |
|
43 | //Buffern
|
44 | sd_raw_sync();
|
45 |
|
46 | uart_putc(116);
|
47 |
|
48 | break;
|
49 | }
|
50 | else
|
51 | {
|
52 | fat_close_file(fd);
|
53 | fentry++;
|
54 | uart_putc(115);
|
55 | }
|
56 | }
|
57 |
|
58 | }
|