mikrocontroller.net

Forum: PC-Programmierung Speicheränderung wird im File nicht sichtbar


Autor: Valko Zapalko (hydravliska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich beschäftige mich gerade mit meinem Masterarbeit. Dabei versuche ich 
das folgende Datenaustausch zu implementieren:

Das DDR2 RAM von einem FPGA Baustein soll als FAT12 Dateisystem 
dargestellt werden. Die Files sollen über USB2.0 ausgelesen werden. 
Dabei soll das FPGA ein Mass Storage Device darstellen.

Ich habe mir ein Testdatei erstellt. Die Einträge in der FAT Tabelle 
mache ich manuell, sprich ich habe das komplette Dateisystem aus 
Speicherbedarf nicht implementiert sondern nur das nötigste. Dabei habe 
ich mir ein Testfile angelegt. Der ist unter Explorer auch sichtbar. Ich 
kann die Datei von PC Seite verändern. Die Änderungen erscheinen auch im 
DDR Speicher.

Das Problem ist, aber, wenn ich was neues durch die FPGA schreibe. Die 
FPGA Firmware schreibt einen String rein, die Speicherzellen ändern 
sich, aber wenn ich die Datei im Explorer aufmache ist da nichts neues 
zu sehen. Ich bin kein Informatiker und kenne mich mit Filebearbeitung 
nicht so ganz. Meine Vermutung wäre, dass die Datei irgendwo im Cache 
des PCs liegt. Im FAT Tabelle ändere ich auch die entsprechenden Feldern 
für den letzen Zugriff sowie letze Änderung im Datei.

Ich würde mich freuen wenn mir jemand ein Tipp geben könnte wie ich die 
Änderung im File sichtbar machen könnte.

Vielen Dank im voraus.


Gruss:
Valentin

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt in den Eigenschaften des USB-Massenspeichergerätes eine Option 
ähnlich "Für schnelles Entfernen optimieren".  Das deaktiviert den Cache 
oder zumindest Teile davon.  Ob das ausreicht?  Da habe ich Zweifel 
für's obige String-Beispiel.  Ein einmal eingelesener Sektor wird wohl 
kaum nochmal eingelesen, wenn Du nur wieder auf ein Byte davon 
zugreifst.

Autor: Valko Zapalko (hydravliska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Vielen Dank für den schnellen Antwort.

Ich werde das ausprobieren.

Hoffentlich klappt das. Normaleweise werden eigentlich kleine Änderungen 
im File passieren, wie zB. so und so viele Bytes wurden gelesen..

Dank nochmal


Gruss:
Valentin

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ein Designfehler, weil ein PC nicht davon ausgeht, daß ein von 
ihm verwaltetes Dateisystem sich quasi "hinter seinem Rücken" ändern 
kann. Das Abschalten des Caches, wie er bei USB-Geräten möglich ist, 
wird auch nicht unbedingt helfen, da es dabei um den Schreibcache 
geht.

Autor: Valko Zapalko (hydravliska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Rufus,

danke für die Erklärung.

Gibt es denn keine Möglichkeit, dass ich die Datei uasserhalb des 
Betriebsystems ändere? Wie könnte ich das Betriebsystem dazu zwingen, 
die Datei neu zu laden? Bei Mikrocontrollern gibt es sowas wie 
"volatile".

Jede Vorschlag würde mir weiterhelfen.

Vielen dank nochmal und schönen Tag.


Gruss:
Valentin

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da Du ein USB-Device nachahmst, gibt es einen recht einfachen Weg - Du 
musst dem PC gegenüber das Verhalten eines Speicherkartenlesers 
nachahmen, aus dem die Speicherkarte herausgezogen und wieder 
hineingesteckt wird. Das veranlasst den PC, seine 
Dateisystemverwaltungsstrukturen neu einzulesen.

Bei USB-"Wechseldatenträgern" sollte es dazu in der Spezifikation 
entsprechende Ereignisse geben, ich würde nach "media eject" o.ä. 
suchen.

Eventuell aber genügt es auch schon, bei den lesenden Dateizugriffen das 
Flag FILE_FLAG_NO_BUFFERING als Parameter von CreateFile zu verwenden, 
ein paar Hinweise dazu finden sich hier: 
http://msdn.microsoft.com/en-us/library/cc644950%2...

Vielleicht löst auch das schon Dein Problem, das setzt natürlich voraus, 
daß Du Windows verwendest und daß Deine Applikation entsprechend 
anpassen kannst.

Autor: Valko Zapalko (hydravliska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für den Vorschlag, kling sehr hilfreich.

Ich werde mich damit beschäftigen, hoffentlich klappt das :)

Danke nochmal für die Hilfe, du hast mir bestimmt enorm viel Zeit 
gespart :)


Gruss:
Valentin

Autor: Valko Zapalko (hydravliska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Rufus,

ich habe das mit dem FILE_FLAG_NO_BUFFERING Flag ausprobiert, es klappt 
wunderbar.

Ich möchte mich bei dir ganz herzlich bedanken :)

Alles gute und ein schönen Nachmittag wünsche ich dir.


Gruss:
Valentin

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.