Event erzeugen Interrupt
-
Das hängt von der API der IO Karte ab. Wenn sie nur Funktionen anbietet, mit der man verschiedene Informationen aktiv abfragen muss bleibt dir wohl nichts anderes als Polling übrig.
Hast du konkrete Fragen zu Events bzw. zu den Grundlagen? Ich habe deine Frage nicht so wirklich verstanden.
-
Ich glaub das sind zwei unterschiedliche sachen die mich interresieren.
Grundsätzlich interresiert mich wie automatisch eine Funktion/ Methode aufgerufen werden kann wenn sich eine Variable ändert.
und die andere sache ist wenn ich eine hardware habe und sich da ein eingangszustand ändert.
irgendwie muss ich ja erstmal raus finden was sich geändert hat.Die I/Os der Karte kann ich über WriteFile bzw ReadFile setzen oder auslesen.
Aber selbst wenn ich jetzt mal annehmen das die karte mir das signal irgendwie an den rechner schickt (per bus oder wie auch immer) muss ich doch immer etwas haben was kontrolliert ob was am rechner etwas ankommt, oder nicht?
-
JBOpael schrieb:
Die I/Os der Karte kann ich über WriteFile bzw ReadFile setzen oder auslesen.
Dann solltest Du darauf auch ein (File-)Handle erzeugen können. Und dieses Handle sollte dann in den Win-API-Funktionen WaitForSingleObjekt, respektive WaitForMultipleObjects verwendbar sein.
-
Nur um das Kind beim Namen zu nennen, um welche Karte handelt es sich?
-
Das ist das Exdul 122 USB-IO Interface von Wasco. Aber eigenlich sollte es egal sein was es für eine hardware ist.
Ich kann das beispiel auch für CAN-BUS bringen. woher weiß ich ob eine Nachricht angekommen ist ohne polling?
oder RS232 ohne polling weiß ich nicht ob was gesendet wurde oder nicht.
ist also eine grundsätzlich frage wie ich das ohne polling lösen kann.
-
JBOpael schrieb:
ist also eine grundsätzlich frage wie ich das ohne polling lösen kann.
Joe_M. schrieb:
...Win-API-Funktionen WaitForSingleObjekt, respektive
WaitForMultipleObjects...
-
Auf einer anderen Plattform habe ich letztens einen interessanten Artikel über "smart & robust applications" gelesen, der sich mit dem Thema Datenhaltung/Validierung in Applikationen beschäftigt hat :Smart Application Architecture. Das Ganze ist zwar C#, aber ohne Probleme auch für C++ umsetzbar.
-
Danke für die hilfe bis jetzt.
hab mich mal ein bisschen über waitforsingleobject informiert. Ich bin mir nicht ganz sicher ob ich das richtig verstanden habe.
Also ich hab das so verstanden das ich waitforsingleobject im thread anwende aber die funktion den thread so lange anhält bis sich etwas am handle ändert?
hab das mal in quelltext umgesetzt wie ich das verstanden habe. ich denk nicht das es so funktionieren wird.
HANDLE hcomm; unsigned char ausgangswert[3]; unsigned char messwert[3]; DWORD BytesGeschrieben; // Com-Port öffnen hcomm = CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); ausgangswert[0] = 0x01; //Lesen Port A ausgangswert[1] = 0x00; ausgangswert[2] = 0x00; while(!Terminated) { while(WaitForSingleObject(hcomm,1000)) {}; WriteFile(hcomm,&ausgangswert,3,&BytesGeschrieben,NULL); // Abfrage Port A ReadFile(hcomm,&messwert,3,&BytesGeschrieben,0); // Auslesen des Ports A }
-
Hi,
nach dem Beispielcode zum XMOD 122 wird die Schreiben-/Lesenfunktion mit einem Timer aufgerufen. Warum machst du es nicht so?
-
Weil ich mich dafür interresiere wie man es anders/"besser" machen kann.