C Befehl in C++ Befehl wandeln

Rosi

Grünschnabel
Hallo zusammen,
ich bin gerade dabei ein altes C Programm auf C++ umzuschreiben und bin dabei auf einen C Funktion gestossen zu dem ich keinen C++ Funktion finden kann.
Die C Funktion heist disable() und befindet sich in der Headerdatei dos.h und auch in bios.h. Die Funktion soll nach meinen Informationen Software interrupts deaktivieren.

Kennt jemand zufaellig eine geeignete C++ Funktion?

Ich Programmiere unter Win XP mit Visual Studio 2005, aber mit Standard C++.

Vielen Dank fuer eure Hilfe
 
Unter Windows NT (dazu gehört auch dein XP), und allen andren neueren Betriebssystemen gibt es keine Interrupts mehr. Du wirst dein Programm umcoden müssen.

Das ist falsch. Natürlich gibt es Interrupts, man kann nur nicht direkt auf diese zugreifen - ausser ein Treiber oder ein Windows-Service.
In DOS wurden Software-Interrupts dazu genutzt, um DOS-Funktionen zu benutzen, wie zb. Konsolenausgabe, Festplattenzugriff usw. Das Waren fest in DOS eingebaute Funktionen, die man irgendwie Aufrufen musste. Das geschah über die Software-Interrupts.
Und Natürlich gibt es Interrupts auch unter "Neueren" Betriebssystemen wie z.B. auch Linux ;)

Die Frage ist - was ist das für ein Programm, was genau soll geschehen? Versuchst du direkt aus deinem Programm Hardware anzusprechen? Wie gesagt, das wird nicht klappen.

Gruß,
Muddin
 
Also: Das Programm soll auf einem Hardware Modul mit CPU und diversen externen Karten(Seriel Interface, Zaehlerkarte, Display, usw.) unter Windows CE 5.0 laufen.
Dabei werden Messdaten von Sensoren ueber die serielle Schnittstelle eingelesen.

Und hier wurde das in der DOS Version mit Interrupts geloest. Momentan habe ich nun die seriellen Schnittstellen mit API Funktionen initialisiert und werde ueber den Input Buffer dann die Daten einlesen.

Noche eine andere Frage:
Kann man unter Windows XP Befehle wie _outp(COM1, 0x60); verwenden um direkt Register zu beschreiben, da mein Programm momentan immer bei diesen Befehlen abstuerzt.

Danke fuer eure Hilfe
 
_inp und _outp kannst du unter XP/NT/2000 nicht benutzen. Wie gesagt, direkt auf Hardware zugreifen ist nicht. Du kannst nicht direkt auf Ports schreiben/lesen (das tun _inp und _outp).
Stattdessen gibt es eine Möglichkeit mit WriteFile/ReadFile auf die Serielle/Parallele Schnittstelle zu schreiben/lesen. Frag mich bitte nicht nach nem Beispiel, ich hab leider keines;)
Andere möglichkeit: Ein Spezieller Treiber - der kann nämlich direkt die Hardware ansprechen. Der hier gefällt mir besonders gut:
http://www.direct-io.com/
Mit diesem Treiber bleibt alles wie es ist - du kannst _inp und _outp benutzen.
Das ding ist allerdings Shareware.

mfg,
Muddin
 
Also das mit der Seriellen Schnittstelle habe ich nun ueber die API Funktionen geloest. Dazu gibts hier im Forum recht viele Beispiele.

Nochmal zu dem Thema direkt auf die Hardware zugreifen:
Wie sieht die Sache aus wenn ich Inline Assembler benutze, kann ich dann direkt Register von meiner Hardware lesen / beschreiben?
 
Also das mit der Seriellen Schnittstelle habe ich nun ueber die API Funktionen geloest. Dazu gibts hier im Forum recht viele Beispiele.

Nochmal zu dem Thema direkt auf die Hardware zugreifen:
Wie sieht die Sache aus wenn ich Inline Assembler benutze, kann ich dann direkt Register von meiner Hardware lesen / beschreiben?

Nein, ein direkter Hardwarezugriff ist nicht möglich. Egal, ob du C/C++ oder Assembler-Befehle benutzt. Der Prozessor arbeitet im sogenannten Protected Mode, der diese zugriffe nicht gestattet.

mfg,
Muddin
 

Neue Beiträge

Zurück