Forum: Mikrocontroller und Digitale Elektronik Elm Chan will nicht Pointer geht kaputt


von chris (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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

von chris (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.