Hallo, habe nun endliches geschaft die serielle schnittstelle unter win xp zu programmieren... writefile readfile ....... Das WriteFile funktioniert super. ReadFile auch aber leider kann man dann immer nur ein Zeichen lesen und vor allem wird auch noch unnötig gewartet. Wie macht man das denn das ein Interrupt (wie bei einm µC) ausgelöst wird und mein C++ Programm in ein ISR springt und dann das zeichen empfängt. Geht das überhaupt auf einem PC? Oder muss man das irgendwie anderes machen? Am liebsten wäre es mir ja wenn es geht wie bei einem Atmel z.B. Wenn ein Zeichen empfangen wurde das dann ein int ausgelöst wird und mein Programm in eine ISR springt. Kennt jemand ein Lösung?
Auf dem PC wird unter Windows die serielle Schnittstelle bereits mit einem Interrupthandler angesteuert - der steckt im Devicetreiber, wo er unter einem Betriebssystem auch hingehört. Für Dein Problem bieten sich verschiedene Lösungsansätze an; Du könntest die Behandlung der seriellen Schnittstelle in einen eigenen Thread packen, Du könntest auf ein "communications event" warten und erst dann ReadFile aufrufen ... Das Thema "Programmierung der seriellen Schnittstelle unter Windows" wurde hier ja schon ad nauseam behandelt, da sollte sich auch der eine oder andere Beispielcode finden.
@Rufus Ok das waren jetzt schon mal gute infos. Ich bin blutiger anfänger was Windows Programmierung angeht. Ist "communications event" die ofizielle bezeichnung dafür. Dann werde ich mal danach googlen
SetCommMask ist eine der für "communication events" zuständigen Funktionen. Damit kann nicht nur der Empfang bzw. das Versenden von Zeichen ein Ereignis auslösen (EV_RXCHAR, EV_TXEMPTY), sondern auch das Wackeln an Handshakeleitungen (EV_CTS, EV_RLSD - steht für DCD, EV_RING etc.). Mit WaitCommEvent kann auf eines dieser Ereignisse gewartet werden, und das kann wiederum auch mit "overlapped I/O" erfolgen.
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.