Forum: Mikrocontroller und Digitale Elektronik FatFS: fopen fehler nach "f_findfirst"


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von FCF (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
FatFS mit STM32 und USB-Stick geht reibungslos solange der Dateiname in 
der Firmware festcodiert ist (E511.DAT). Wenn ich aber anhand von 
"f_findfirst" beliebige Datei mit der Endung ".DAT" suche und danach 
versuche diese zu öffnen, scheitert die Funktion "f_open".
wo liegt der Fehler? muss irgendwas zwischen f_findfirst und f_open 
geschehen? reinitialisiert?
Danke für eure Hilfe.
Gruß

      fr = f_findfirst(&dp, &fno, "", "*.DAT");
      if (fr == FR_OK && fno.fname[0])
          strcpy(file_ndesc[0].file_name, fno.fname);
      ....

      if(f_open(&fp,file_ndesc[0].file_name,FA_READ)==FR_OK)
      {
         printf("Ok");
      }
      else
      {
         printf("Fehler");
      }

von FCF (Gast)


Bewertung
0 lesenswert
nicht lesenswert
oder andersrum formuliert, was ist zu beachten wenn "f_findfirst()" von 
FatFS verwendet wird? in der Online-Doku bin ich nicht schlauer 
geworden.
Danke

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Vermutlich musst Du das von f_findfirst verwendete "directory object" 
(wird als erster Parameter an f_findfirst übergeben, bei Dir also "dp") 
auch wieder schließen.

Das geschieht mit f_closedir.

Siehe Beispielcode:
http://elm-chan.org/fsw/ff/doc/findfirst.html

von FCF (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Erstmal Danke Rufus für die Antwort.
ich habe f_closedir schon danach aufgerufen. Leider hat nichts gebracht.
Ein anderer Vorschlag vielleicht?
Danke.

      fr = f_findfirst(&dp, &fno, "", "*.DAT");
      if (fr == FR_OK && fno.fname[0])
          strcpy(file_ndesc[0].file_name, fno.fname);


      if(f_open(&fp,file_ndesc[0].file_name,FA_OPEN_EXISTING)==FR_OK)
      {
         printf("Ok");
      }
      else
      {
         printf("Fehler");
      }

      f_closedir(&dp);

von FCF (Gast)


Bewertung
0 lesenswert
nicht lesenswert
wenn ich debugge finde ich in den tiefen "Dschungel" von FatFS einen 
Rückgabefehler RES_NOTRDY beim Aufruf voin disk_read(....). Ist es ein 
Hindweis auf Timming fehler oder lege ich falsch?
Danke für eure Hilfe.
Gruß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.