Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: bscreator am 29. August 2009, 20:12
-
Hallo,
ich muss unter C den Port 3, bzw. Port 4 auslesen.
Leider find ich im Internet und in meinen C-Büchern keine Befehle, wie man auf Ports schreiben und von Ports lesen kann.
Wisst ihr, wie sowas geht ?????
Gibt es sonst noch Möglichkeiten, wie Programme miteinander kommunizieren können ?
Gruss,
bsc
-
Was für Ports meinst du? I/O-Ports, COM-Ports, TCP/UDP-Port, Ports als Betriebssystem-Konzept, ...?
-
Ich denke mal, du meinst C-Äquivalente zu in und out? Diese finden sich in jedem mittelklassigen Tutorial, sind aber sehr einfach selbst zu implementieren.
Falls dir die Funktionsweise nicht geläufig ist:
in dx, al überträgt die Daten vom Port an der Adresse dx nach al,
out al, dx überträgt die Daten aus al nach dx
Mithilfe von http://lowlevel.brainsware.org/wiki/index.php/Teil_2_-_Assembler_101 und http://lowlevel.brainsware.org/wiki/index.php/Inline-Assembler_mit_GCC sollte es dir nun möglich sein (sofern du in C entwickelst, ansonsten ein bisschen Denkarbeit investieren, um es in die Sprache deiner Wahl umzuformen), die Funktionen zu implementieren.
-
Gibt es sonst noch Möglichkeiten, wie Programme miteinander kommunizieren können ?
Das hätte aber nicht ganz so viel mit I/O-Ports zu tun...
-
Richtig, hier wäre dann Interprozesskommunikation gefragt. Doch hier spricht man AFAIK auch nichts von Ports...
Aber sich der Autor nicht meldet, kann man viel herumspekulieren, was er eigentlich will :roll: :wink:
-
Ich denke mal, du meinst C-Äquivalente zu in und out? Diese finden sich in jedem mittelklassigen Tutorial, sind aber sehr einfach selbst zu implementieren.
Ich hoffe du kennst eines dieser mittelklassigen Tutorials, wo das drinsteht.
Wie gesagt, mein Assemblerprogramm verwendet den Port 4.
Der Inline-Assembler von MS-Visual-C++ ist mir schon geläufig. Hab auch bereits versucht, die Routine mit dem IinlineAss. zu implementieren. Leider kommt genau bei Verwendung des IN-Befehls (oder OUT-Befehls) eine Fehlermeldung, dass der Zugriff nicht gestattet ist.
Deswegen hatte ich gehofft, dass ihr mir da weiterhelfen könnt...
-
Kannst du vielleicht noch mal kurz klar stellen von welchen Ports du redest bzw. was du mit denen anfangen willst.
Irgendwie hab ich den Eindruck du versuchst Inter-Prozess-Komunikation über I/O-Ports(in/out).
Mit IN und OUT kann man nur von RING 0(kernel) aus uneingeschränkt auf I/O-Ports zugreifen. Alles andere muss vom kernel explizit erlaubt (in das TSS eingetragen) werden.
-
Was auch immer "Port 4" sein soll...
"Der Zugriff ist nicht gestattet" -> Meldet das dein Compiler?
-
Unter Windows ist der direkte Zugriff auf Ports, ab Xp nicht mehr gestattet. Wenn du dennoch Zugriff brauchst, musst du eine Dll nehmen, da der Zugriff nicht mehr direkt erfolgt (ueber in/out), sondern ueber irgendwelche Windowsgeschichten. Kannst hier (http://en.allexperts.com/q/C-1040/2008/7/using-c-use-parallel.htm) einige gute Infos kriegen oder hier (http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/a20efc1d-db3a-478a-8ba4-e2bf64158cae).
Ich tippe mal, das ist es was du suchst^^.
-
Gibt es sonst noch Möglichkeiten, wie Programme miteinander kommunizieren können ?
Ich denke mal, er möchte in irgendeinerweise Interprozesskommunikation implementieren.
Für alles andere behilf dich halt der WinAPI.