Hallo, ich habe ein PRoblem mit dem Dateisystem von Elm-Chan. Konfiguration: AT91SAM9260 auf COmpact Flash Karte. Lesen/schreiben Routinen klappen ohne Probleme, in dem Bereich kann das Problem nicht liegen. Keil Compiler. Problem: Während dem Debugger habe ich folgendes rausgefunden. Wenn ich eine datei öffne (f_open(..)), springt die funktion nach auto_mount etc. in die "trace-path" funktion. Bevor die Funktion aufgerufen wird, ist mein FATFS Objekt da und hat auch korrente Inhalten (FAT-Type, Größe ...). In der "trace-path" funktion stimmt die Referenz auf das FATFS Objekt auch nocht, sobald die "trace-path" funktion jedoch beendet ist, habe ich in der "auto_mount" die "trace-path" aufgerufen hat nach dem aufruf einen Pointer auf ein FATFS Objekt an Position 0x00, alle Inhalte sind auf 0 und damit kann die funktion nicht mehr weiterarbeiten. Wie gesagt, vor dem Aufruf alle ok, danach ist dsa Objekt komplett hinüber. Ich habe am Code nix modifiziert. Elm-Chan Version ist 0.5 Hoffe mir kann einer dabei helfen, ich weis nicht mehr weiter... Grüße
Hört sich für mich als Laie nach Stackproblemen an. Wieviel Platz hast du noch im RAM, wenn du DATA+BSS vom SRAM abziehst?Kannst du beim Keil Compiler die Stackgrösse vorgeben (so dass eine Warnung kommt, wenn DATA+BSS zu gross werden)? Das FatFS allein braucht ca. D*554+F*544 (D=Anzahl Laufwerke, F=Anzahl geöffneter Files, hier AVR Target) Bytes Arbeitsspeicher, das erscheint mir bei dem AT91SAM9260 (8KB SRAM) schon recht viel. wieviele offene Files hast du? Es gibt von Elm Chan auch noch das Tiny FatFS mit deutlich weniger Platzbedarf (544+F*28 bzw. 544+F*32 Bytes) im Arbeitsspeicher. Hast du das mal probiert? Desweiteren sehe ich gerade den Abschnitt Critical Section in der Appnote. Vielleicht können diese Regeln für robustes Programmieren dir auch weiterhelfen. http://elm-chan.org/fsw/ff/00index_e.html http://elm-chan.org/fsw/ff/en/appnote.html
Ja irgendso ein Problem denke ich wird es sein.. 8KB internes RAM ist nicht viel, die externen 32MB sollten aber reichen und da liegen auch alle Variablen drin .. Herausgefunden habe ich jetzt das meine Read Funktion den Buffer überschreibt, warum auch immer.. ich habe: FATFS fs FIL file1 jetzt bekommt die disc_read funktion ja ein Pointer auf FATFS.win, den übergebe ich meiner CF_ReadSector. Diese liest 256 Wörter (also 512Byte). Ab etwa 500Byte überschreibt die FUnktion mir die komplette fs Struktur, da in dem gelesenen Sektor nullen drin sind, sieht es so aus als wenn der pointer komplett auf 0 geht, tut er aber nicht, er wird überschrieben ... Grüße
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.