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


von Valko Z. (hydravliska)


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

von Hc Z. (mizch)


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.

von Valko Z. (hydravliska)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Valko Z. (hydravliska)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Valko Z. (hydravliska)


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

von Valko Z. (hydravliska)


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

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.