Skip to end of banner
Go to start of banner

Synchroisation & Notifications [DE]

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 9 Next »


Allgemein

Generell besteht die Möglichkeit den Treiber in einem Interrupt-Mode zu betreiben. Neben der Aktivierung des Interrupt-Mode im Treiber muss dafür über die xChannelRegisterNotification-Funktion eine Callback-Routine angemeldet werden. Möglich ist dies für verschiedene Arten von Events. Dabei liefern die Callback-Routine selbst keine Daten aus. Sie "informiert" nur über das Eintreten eines Events. Nach dem Registrieren des Events ist also nach wie vor beispielsweise die xChannelIORead- oder xChannelIOWrite-Funktion erforderlich um Prozessdaten zu handeln.


Notifikation für I/O

Um die Notifikations zu verstehen, ist es zunächst erforderlich über einige Dinge des DPM zu sprechen. Generell ist das DPM in verschiedene Bereiche aufgeteilt. Einer der wichtigsten ist hierbei die Proessdaten-Area für Eingangs- und Ausgangs-Daten. Der Bereich ist durch einen Handshake-Mechnismus geschützt welcher den Zugriff auf das Prozessdaten-Image zwischen Host/Applikations-Seite und Firmware/Gerät-Seite steuert. Die Applikation darf nur auf das Prozess-Image zugreifen, wenn der Handshake-Token auf der Host-Seite liegt. Die Applikation sollte dies also vor einem Zugriffsversuch überprüfen. In den xChannelIORead- bzw. xChannelIOWrite-Funktion ist dies bereits implementiert. Bei der Verwendung dieser Funktionen tut dies der Treiber also bereits selbst. Nach dem Zugriff auf das Prozess-Image toggelt der Treiber den Handshake an die Geräteseite. Die Firmware wird die Prozessdaten von/auf einen internen Datenpuffer kopieren und toggelt seinerseits das Handshake wieder an die Host-Seite zurück.

Der Zusammenhang besteht darin, dass durch das Toggeln des Handshake von der Geräte- zur Host-Seite ein Event ausgelöst wird. Wenn der Interrupt-Mode aktiviert ist, wird also mit jedem Wechsel des Handshake Richtung Host ein Event ausgelöst.


  • No labels