Speicheränderung wird im File nicht sichtbar

#1680024
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
#1680053
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.
#1680968
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
Persönliche Seite #1681023
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%28v=VS.85%29.aspx

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren