www.mikrocontroller.net

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


Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.