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