Forum: Mikrocontroller und Digitale Elektronik AVR_FAT32 und zwei geöffnete Dateien


von Reinhard (reinhard55)


Lesenswert?

Hallo Mikrocontroller-Freunde,

ich verwende die Bibliothek AVR_FAT32 auf einem Arduino Uno.

Ich möchte nun während eine Datei zum lesen geöffnet ist, und auch schon 
von ihr gelesen wurde, eine zweite Datei zum lesen öffnen.
Da die Bibliothek kein File-Handle oder sowas hat, weiß ich nicht, wie 
ich das machen kann.
Es müssten doch Informationen zum Status der ersten Datei erhalten 
bleiben, während die zweite Datei geöffnet und gelesen wird.

Hat jemand von euch eine Lösung dazu?

Vielen Dank im Voraus.

Grüße
Reinhard

von Wastl (hartundweichware)


Lesenswert?

Reinhard schrieb:
> Hat jemand von euch eine Lösung dazu?

Funktionsfähiges (nachvollziehbares) Beispiel posten und zeigen
was nicht geht, dann kann man schauen ob und wie es eine Lösung
gibt. So einfach ist das.

von Wastl (hartundweichware)


Lesenswert?

Nachtrag: nachvollziehbares Beispiel so reduzieren dass es
keinen unnötigen Ballast enthält.

von Christian (grobig80)


Lesenswert?

Hallo,
also wenn das diese lib ist: 
http://www.mikrocontroller.net/attachment/116369/AVR-mmc-0.6.4.zip
scheint das nicht vorgesehen zu sein. Alle Dateioperationen arbeiten da 
doch mit dem einen "struct File_t file;      // wichtige dateibezogene 
daten/variablen" struct in der file.c, schätze aus Speichergründen. Das 
müsstest du wohl selber einbauen. Oder sowas wie FatFs nutzen und evtl. 
die Hardware Ansteuerung aus dieser lib verwenden.
Aber hab auch nur n kurzen Blick in die file.c geworfen.
Viel Erfolg!

von Reinhard (reinhard55)


Lesenswert?

Hallo Wastl,
die Antwort von Christian fand ich gut.

Danke Christian.

von Andreas B. (bitverdreher)


Lesenswert?

Nimm die lib von Elm-Chan:
http://elm-chan.org/fsw/ff/00index_e.html

von Reinhard (reinhard55)


Lesenswert?

Hallo zusammen,

ich bin dabei, die lib von Elm-Chan zu kompilieren.
Ich arbeite mit Atmel Studio 6, und ein Arduino Uno R3 ist mein Ziel.

Obwohl ich im ffconf.h FF_USE_LFN ausgeschaltet habe mit
  #define FF_USE_LFN    0
bekomme ich diese Fehlermeldungen:

Error  1  undefined reference to `ff_oem2uni'  D:\Arduino 
Projekte\Musterprojekt_FatFs\Release\ff.c  1  1  Musterproj_FatFs
Error  2  undefined reference to `ff_wtoupper'  D:\Arduino 
Projekte\Musterprojekt_FatFs\Release\ff.c  1  1  Musterproj_FatFs
Error  3  undefined reference to `ff_wtoupper'  D:\Arduino 
Projekte\Musterprojekt_FatFs\Release\ff.c  1  1  Musterproj_FatFs
Error  4  undefined reference to `ff_wtoupper'  D:\Arduino 
Projekte\Musterprojekt_FatFs\Release\ff.c  1  1  Musterproj_FatFs
Error  5  undefined reference to `ff_uni2oem'  D:\Arduino 
Projekte\Musterprojekt_FatFs\Release\ff.c  1  1  Musterproj_FatFs
Error  6  undefined reference to `ff_uni2oem'  D:\Arduino 
Projekte\Musterprojekt_FatFs\Release\ff.c  1  1  Musterproj_FatFs

Wer hat eine Idee und kann helfen?

Grüße
Reinhard

von Christian (grobig80)


Lesenswert?

Hallo,
sieht fast so aus als fehlt die ffunicode.c in deinem Projekt.
Schaue auch nochmal genau in die ffconf.h evtl da noch was vergessen 
ein/aus zu schalten?
Du findest aber auch zig examples zu FatFs im Netz wo man sich 
funktionierende configs angucken kann.
Das wird schon! :)

von Reinhard (reinhard55)


Lesenswert?

Hallo Christian,
vielen Dank für deine Antwort.
Stimmt, die ffunicode_avr.c habe ich in meinem Projekt nicht drin.
Mit gutem Grund:
denn die beginnt mit
  #if FF_USE_LFN != 0
wird also nicht gebraucht.

Und was mich stutzig macht:
mit #define FF_USE_LFN    0
werden auch alle Stellen im Code nicht gebraucht, die ff_oem2uni, 
ff_wtoupper oder ff_uni2oem aufrufen.

Kann es sein, dass die ffconf.h 'zu spät' eingebunden wird?

von Falk B. (falk)


Lesenswert?

Reinhard schrieb:
> ich bin dabei, die lib von Elm-Chan zu kompilieren.
> Ich arbeite mit Atmel Studio 6, und ein Arduino Uno R3 ist mein Ziel.

Na so ein Zufall.

Beitrag "Re: Fatfs Code funktioniert nicht"

von Andreas B. (bitverdreher)


Lesenswert?

Gerade mal geschaut: Es gibt wohl eine Arduino lib FatFs, wo die 
Elm-Chan lib schon auf den Arduino getrimmt wurde.
Ohne Garantie, da ich das nie getestet habe! Ich kenn nur die Elm-chan 
lib selbst, die hervorragend programmiert ist.

von Reinhard (reinhard55)


Lesenswert?

Fanke Falk,
das sieht sehr gut aus :-))

Ich baue damit mal mein vorhandenes Projekt um.

Viele Grüße
Reinhard

von Reinhard (reinhard55)


Lesenswert?

Hallo Andreas,

danke für den Tipp. Ich werde das auch mal ausprobieren.

Viele Grüße
Reinhard

von Christian (grobig80)


Lesenswert?

Reinhard schrieb:
> Hallo Christian,
> vielen Dank für deine Antwort.
> Stimmt, die ffunicode_avr.c habe ich in meinem Projekt nicht drin.
> Mit gutem Grund:
> denn die beginnt mit
>   #if FF_USE_LFN != 0
> wird also nicht gebraucht.
>
> Und was mich stutzig macht:
> mit #define FF_USE_LFN    0
> werden auch alle Stellen im Code nicht gebraucht, die ff_oem2uni,
> ff_wtoupper oder ff_uni2oem aufrufen.
>
> Kann es sein, dass die ffconf.h 'zu spät' eingebunden wird?

Ok das ist etwas merkwürdig wenn ff_use_lfn 0 ist. Tritt das Problem 
auch auf wenn du die fatfs internen String functions ausschaltest also 
#define FF_USE_STRFUNC  0 setzt?

... also ich hab es gerade eben selbst mal mit einem meiner Projekte 
probiert, ist zwar eine andere Plattform (rp-pico, vs code, platform.io, 
pico-sdk), da nutze ich die ganz normale R0.15 Version von FatFs und 
wenn ich da:
#define FF_USE_LFN    0
und entsprechend auch:
#define FF_FS_EXFAT    0
#define FF_LBA64    0
setze compiliert das einwandfrei.

: Bearbeitet durch User
von Reinhard (reinhard55)


Lesenswert?

Christian schrieb:
> Reinhard schrieb:

> Ok das ist etwas merkwürdig wenn ff_use_lfn 0 ist. Tritt das Problem
> auch auf wenn du die fatfs internen String functions ausschaltest also
> #define FF_USE_STRFUNC  0 setzt?

Ja, #define FF_USE_STRFUNC 0 ist eingestellt gewesen, und dann treten 
die Fehler auch auf.
Ich habe auch keine Idee, warum die bedingte Programmierung nicht 
greift.
Bin jetzt auf die Lib von Falk gegangen.
siehe oben: Beitrag "Re: Fatfs Code funktioniert nicht"

Nach einigen Anpassungen an meine Hardware funzt das gut.

von Reinhard (reinhard55)


Lesenswert?

Ich habe aber noch keine zweite Datei gleichzeitig geöffnet, bin ich 
noch nicht zu gekommen.
Da habe ich aber keine Bedenken, weil die beiden f_open verschiedene 
structs benutzen für das File.
Grüße
Reinhard

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.