Autor Thema: Port-Befehle unter C/C++  (Gelesen 3996 mal)

bscreator

  • Gast
Gespeichert
« 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

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 29. August 2009, 20:30 »
Was für Ports meinst du? I/O-Ports, COM-Ports, TCP/UDP-Port, Ports als Betriebssystem-Konzept, ...?
Dieser Text wird unter jedem Beitrag angezeigt.

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #2 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.
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #3 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...

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #4 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:
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

bscreator

  • Gast
Gespeichert
« Antwort #5 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...

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #6 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.
« Letzte Änderung: 02. September 2009, 18:55 von MNemo »
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #7 am: 02. September 2009, 18:57 »
Was auch immer "Port 4" sein soll...

"Der Zugriff ist nicht gestattet" -> Meldet das dein Compiler?
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

tarrox

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #8 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 einige gute Infos kriegen oder hier.

Ich tippe mal, das ist es was du suchst^^.

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #9 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.
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

 

Einloggen