Lib Riegel, Abfrage ob file_entry frei ist

Gast #2667411
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
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.