ubuntuusers.de

c++ testprogramm zum ltp port ansprechen.

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Tredory

Anmeldungsdatum:
30. Juni 2007

Beiträge: Zähle...

Wohnort: 49509 Recke

Hi, ich bin ja gerade dabei mich ein wenig mit c++ zu befassen. und habe nun mal versucht den lpt port anzusprechen.

#include <iostream>
#include <sys/io.h>
using namespace std;

int main()
{
int a;
int b;
ioperm(0x378,1,1);
cout<< "Eine Zahl zwischen 0 und 255\n";
cin>>a;
outb(a,0x378);
b = inb(0x379);
cout<<b;
return 0;
} 

Es ist halt nur um zu gucken wie ich auf den lpt-port zugreifen kann, compilieren geht und das ausführen auch. wenn ich eine zahl eingebe setzt er mir die Datenleitungen das ports auch korrekt, nur der Befehl "b = inb(0x379);" scheint nicht zu funktionieren.

Hier das was er im Programmverlauf ausgibt:

Eine Zahl zwischen 0 und 255
0
Segmentation fault (core dumped)

Warum kommt dort jetzt "Segmentation fault" statt des werts der Anliegt ?

Tredory

(Themenstarter)

Anmeldungsdatum:
30. Juni 2007

Beiträge: Zähle...

Wohnort: 49509 Recke

So Fehler gefunden, da war ich wohl ein wenig Blind 😉
Es fehlte nur

ioperm(0x379,1,1);


Nun siehts so aus

#include <iostream>
#include <sys/io.h>
using namespace std;

int main()
{
int a;
int b;
ioperm(0x378,1,1);
ioperm(0x379,1,1);
//cout<< "Eine Zahl zwischen 0 und 255\n";
//cin>>a;
//outb(a,0x378);
b = inb(0x379);
cout<<b;
return 0;
} 

Aber jetz verstehe ich nicht wie er das ausliest, habe alle 5 Leitungen (Error;Select;P/E;Busy und ACK) auf low, aber er gibt mir 135 als Wert aus. Kann mir da jemand sagen wie er die Signale dort interpretiert?

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6518

Wohnort: Hamburg

Hab sowas lange nicht mehr gebraucht, desshalb kann ich nur Vermutungen anstellen.
135 ergibt als Bitmuster 10000111 Vielleicht sind die Leitungen low-active und werden daher invertiert.

psicom

Anmeldungsdatum:
16. Januar 2008

Beiträge: 6

Guten Abend!

Ich begrenze mich derweilen noch auf die Ausgabe per LPT Port, allerdings würde es mich interessieren wie ich das ganze Programm mit Rechten belegen kann?

Ich (noch Linuxunwissender) habe mir vorgestellt, das Prg als Daemon (möglichst als Root od. System) laufen zu lassen, und dann mit einem Externen Programm darauf zuzugreifen! Nur wie mach ich das?

psicom

Anmeldungsdatum:
16. Januar 2008

Beiträge: 6

Ich glaube einen anderen / besseren Weg gefunden zu haben.

Versuche gerade den lpd umzuprogrammieren. Danach sollte man dann per Shell Script: I/O (Raw) Zugriff auf die Datenleitungen haben und das ganze dann auch mit einer Zeitsteuerung versehen können...

Mal schaun wie das wird...

Antworten |