Parallele Schnittstelle
-
Hallo erstmal und ein gutes neues jahr!!
Ich bin vor kurzem auf Linux und C++ umgestiegen und möchte nun die einzelnen Pins der parallelen Schnittstelle ansprechen, hab bis jetzt aber nicht brauchbares gefunden.
Kann mir jemand von euch mit nem Beispielcode helfen?? (Bitte auch etwas erklären, da ich nicht nur abschreiben sondern auch verstehen will..)MFG Olti
-
Vlt. hilft dir folgendes weiter:
http://www.hanser.de/buch.asp?isbn=3-446-22973-6&area=Computer
Dort rechts "Quelltexte aus dem Buch, Tools und weiterführende Informationen" runterladen, im Archiv die Datei Beispiele (wieder nen archiv). Im Kapitel 9 gibts dann "LED-line.c".
Is aber nicht all zu viel kommentiert, weils ja eigentlich zum Buch gehört
-
Bei der hardware-nahen Programmierung zur Ansteuerung der I/O-Ports unter Linux ist ein Bisschen mehr zu beachten (temporäre "root"-Rechte, Compiler-Option), als dass man einfach den Quelltext durch GCC schickt und das war's.
In der FAQ dieses Forums müsstes du auch was dazu finden - oder du kaufst einfach mein von Mekl zitiertes Buch...Martin
-
Wusst ich noch nicht ^^
Soweit bin ich im Buch eigentlich noch garned ...
Habs nur hier im Forum gelesen und da ich derzeit im Informatik Unterricht die Erlaubnis hab alles unter Linux zu probieren (auch wenn ich ned mim Stoff mithalten sollte etc.) hab ichs mir eben auch aus Interesse zugelegt
-
Also des Buch klingt wirklich ganz interessant und ich werde es mir auch holen. Des Problem ist nur das ich die info am besten gleich oder noch besser gestern gebraucht hätte und die Woche nimmer in die Stadt oder so komm ums zu kaufen.
Könnt ihr mir des vielleicht hier kurz weng erklären??MFG olti
-
Hier ein kleiner Quelltext dazu (Erzeugt ein Lauflicht über die 8 Datenleitungen des Parallelports):
/* LED-line.c (c) Martin Gräfe http://www.martin-graefe.homepage.t-online.de */ # include <stdio.h> # include <unistd.h> # if defined __GLIBC__ # include <sys/io.h> # else # include <asm/io.h> # endif int get_lp_base(void) /* parallele Schnittstelle suchen */ { int i, base_adr[3] = {0x3bc, 0x378, 0x278}; for (i=0; i<3; i++) { outb_p(0, base_adr[i]); if (inb_p(base_adr[i]) == 0) return(base_adr[i]); } return(0); } int main() { int i, j, port_adr; char light[12] = " 0 \r"; if (iopl(3) != 0) /* Zugriff auf I/O-Ports freischalten */ { perror("LED-line: Can't set I/O permissions"); return(1); } if ((port_adr = get_lp_base()) == 0) { fprintf(stderr, "LED-line: No parallel port found.\n"); return(1); } printf("Parallel port found at 0x%x.\n", port_adr); i = 0; j = 1; while (1) { outb(1<<i, port_adr); write(1, &(light[i]), 11-i); usleep(100000L); /* 100000 Mikrosek. warten */ i += j; if ((i == 0) || (i == 7)) j = -j; } return(0); }
Damit der C-Compiler die Funktionen für den Port-Zugriff (inb() und outb()) kennt, muss die Option '-O2' ('O' wie 'Optimierung', nicht Null!) angegeben werden:
gcc -O2 -o LED-line LED-line.c
Um den Zugriff auf die I/O-Ports freischalten zu können, muss das Programm (temporär) über root-Privilegien verfügen:
> su Kennwort: # chown root LED-line # chmod a+s LED-line # exit > ./LED-line
Martin
-
Man hätte aber auch einfach mal kurz Suchfunktion bemühen können:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-123739-and-highlight-is-parallele+schnittstelle+lpt.html