Exception durch asm unter WinXP
-
Hallo Leute,
ich bin Neuling in Sachen C++ Programmierung und vor allem in Assambler. Dem zu Folge auch neu in diesem Forum.Folgendes Problem:
Ich muß eine einfache Anwendung schreiben, die in der Lage ist, auf dem COM-Port ein kurzes Signal zur Steuerung externer Geräte auszugeben.
Jemand gab mir den Tipp es mit asm zu versuchen .
Unter Zuhilfenahme des Internets
, entstand folgender code:#include <iostream>
int main(int /*argc*/, char* /*argv*/[])
{
std::cout << "RTS ein" << std::endl;_asm{
push ax // AX-Register vom Prozessor sichern
push DX // DX-Register vom Prozessor sichern
mov DX, 03F8h +4 // die serielle Schnittstelle und das 4.Register auswählen
mov al, 2 // bin 0000.0010 ; RTS ist das 2. bit
out DX, al // RTS einschalten
pop DX // den Wert wieder herstellen
pop ax
}std::cout << "Bitte geben Sie ein Zeichen ein und drücken dann die Eingabetaste:";
std::cin.get();
std::cout << "RTS aus" << std::endl;_asm{
push ax
push DX
mov DX, 03F8h +4 // die serielle Schnittstelle und das 4.Register
mov al, 0 // bin 0000.0000
out DX, al // RTS ausschalten
pop DX
pop ax
}return 0;
}Das Progrämmchen wird ohne Probleme compiliert und gelinkt.
Jedoch kommt zur Laufzeit eine Exception. Direkt nach der ersten Textausgabe.
Im Forum habe ich nun mehrfach Andeutungen gefunden, daß "in" und "out" privilegierte Befehle sind, die unter NT-Derivaten nicht ohne Weiteres ausgeführt werden können.
Nun die Frage(n)
Stimmt das? Kann ich die Sache also nicht so Lösen? Gibt es andere Möglichkeiten? Vielleicht auch nur über die WindowsAPI?
Was ich brauche, ist einfach ein kurzes Hi- oder LoSignal an irgend einem Anschluß des Comports. Eventuell später auch in definierten Zeitabständen.
Vielen Dank für Eure Hilfe i.V.
-
Ja, es stimmt, unter WinNT kannst du in/out in normalen Anwendungen nicht benutzen.
Dafuer muesstest du AFAIK einen Treiber schreiben.Also erstmal ab nach WinAPI, vielleicht kann man dir ja dort weiterhelfen.

-
Dieser Thread wurde von Moderator/in Nobuo T aus dem Forum Assembler in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Schau dir mal CreateFile und WriteFile, evtl. auch noch die Communications Functions an, ich denke, da sollte auch für dich etwas dabei sein

-
ein Posting, daß ich vorher übersehen habe:
http://www.c-plusplus.net/forum/viewtopic.php?t=17070&highlight=seriell
Danke für die schnellen Antworten

Communication Funktions waren ein guter Tipp