Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: bscreator am 29. August 2009, 20:12

Titel: Port-Befehle unter C/C++
Beitrag 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
Titel: Re: Port-Befehle unter C/C++
Beitrag von: Jidder am 29. August 2009, 20:30
Was für Ports meinst du? I/O-Ports, COM-Ports, TCP/UDP-Port, Ports als Betriebssystem-Konzept, ...?
Titel: Re: Port-Befehle unter C/C++
Beitrag von: DerHartmut am 01. September 2009, 02:56
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.
Titel: Re: Port-Befehle unter C/C++
Beitrag von: XanClic am 01. September 2009, 15:04
Zitat von: bscreator
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...
Titel: Re: Port-Befehle unter C/C++
Beitrag von: DerHartmut am 01. September 2009, 16:49
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:
Titel: Re: Port-Befehle unter C/C++
Beitrag von: bscreator am 02. September 2009, 18:28
Zitat
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...
Titel: Re: Port-Befehle unter C/C++
Beitrag von: MNemo am 02. September 2009, 18:47
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.
Titel: Re: Port-Befehle unter C/C++
Beitrag von: DerHartmut am 02. September 2009, 18:57
Was auch immer "Port 4" sein soll...

"Der Zugriff ist nicht gestattet" -> Meldet das dein Compiler?
Titel: Re: Port-Befehle unter C/C++
Beitrag von: tarrox am 02. September 2009, 19:07
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^^.
Titel: Re: Port-Befehle unter C/C++
Beitrag von: DerHartmut am 02. September 2009, 22:17
Zitat
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.