Forum: PC-Programmierung rs232 win xp mit interrupt


von micro1 (Gast)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von micro1 (Gast)


Lesenswert?

@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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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