Forum: Mikrocontroller und Digitale Elektronik Lib Riegel, Abfrage ob file_entry frei ist


von Anna (Gast)


Lesenswert?

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
}

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.