PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c++ - linuxäquivalent (g++) des outp-befehls von borland ?



Matzetronic
23-07-2001, 12:31
hi,

ich möchte meinen parallelport ansteuern. jetzt stehe ich vor dem problem, dass ich das linuxäquivalent von borland's "outp"-befehl suche, aber leider nicht finden kann. ausserdem scheitert's meistens an den librarys bzw. den .h-dateien. gibts irgendwo ein hilfreiches online-manual für umsteiger von windows/borland/etc.-C++ und/oder C auf linux g++ und/oder gcc ???? denn z.b. eine dos.h wird es unter linux nicht in der form geben, oder ??? ich sitze hier schon seit tagen dran und komme nicht weiter, da g++ viele .h-dateien nicht findet... :mad:

*verzweifeltnachhilferuf*

matze

WWG2000
23-07-2001, 13:43
ich weiß zwar nicht 100%ig ob es das ist was du suchst, aber soweit ich weiß sollte outb (Linux) genau das gleiche wie outp (Borland) machen.

vielleicht brauchst du dafür folgendes:
#include asm/io.h
#include stdio.h

bin mir da aber nicht sicher, schau mal in die Hilfe.

[ 23. Juli 2001: Beitrag editiert von: WWG2000 ]

jgbauman
23-07-2001, 16:17
Tja einfach ist es nicht unbedingt einfach von sehr DOS-lastigem Quellcode auf Linux zu portieren. Fuer die Terminalansteureung solltest Du dir nucrses anschauen (man ncurses, als Einstieg).
Ansonsten sollte es eigentlich fuer ein normales Programm unter einem Multitasking-betriebsystem Tabu sein mit der Hardware direkt zu reden. Dazu gibst ja eigentlich Treiber.

Ansonsten hier ein paar Links (die alle ueber die Suchfunktion hier im Forum zu finden sind, echt nuetzlich!!! Sollte man sich vielleicht mal anschauen!!!!! ):
http://www.lvr.com/parport.htm http://www3.htl-hl.ac.at/doc/howto/en/html/mini/IO-Port-Programming.html#toc8 http://www.circlemud.org/~jelson/software/parapin/

Jimmy
24-07-2001, 09:24
Tach zusammen!

Das mit dem "outb" ist so eine Sache. Funktioniert zwar im prinzip, ist aber nicht so der Hit, da du das Programm dann immer als root laufen lassen musst.

Die einzig saubere Lösung wäre eine trennung in einen Treiber und das eigentliche Programm. Wegen einer doku kannst du mal bei www.linuxdoc.org (http://www.linuxdoc.org) vorbei schauen.

Ich hab mal so etwas ähnliches Probiert und hab dazu einen Treiber für LC-Display auseinerander genommen. Den Treiber haben sie vor ca. 1-2 Jahren mal im Linux-Magazin ( www.linux-magazin.de (http://www.linux-magazin.de) ) vorgestellt. kannst da ja mal suchen.

mfg

Jimmy

Matzetronic
24-07-2001, 17:10
hallo,

danke erstmal für eure antworten. ich habe jetzt eine lösung gefunden mit parapin. trotzdem würde ich gern mein ürsprüngliches problem lösen, hier mal das programm:

#include <stdio.h>
//*#include <conio.h>
#include <iostream.h>

const int LPT1 = 0x378;
const int LPT2 = 0x278;


class parport
{
public:
parport(int addr);
~parport(void);
int set_val(char *para);
private:
int out;
int base;
int stat;
int ctrl;
};

parport: :parport(int addr)
{
base=addr;
stat=base + 0x01;
ctrl=base + 0x02;
out = 0x00;
};

parport::~parport(void)
{
};

int parport::set_val(char *para)
{
int op =0;
out = 0 ;
for (int a=0; a<8; a++)
{
if (para[7-a] == '0') op=0; else op=1;

cout << op;
out &= (!(1 << a));
out |= (op << a);
};

return outb(base, out);
};


int main(int argc, char *argv[])
{
parport *port = new parport(LPT1);

cout << "[log] out -> " << port->set_val(argv[1]);

delete port;

return 0;
};

mit outb klappt es allerdings auch nicht :(

ich bekomme folgende fehlermeldung:
<BLOCKQUOTE><font size="1" face="Arial,Helvetica,Geneva">Zitat:</font><HR> parallel.c: In method `int parport::set_val(char *)':
parallel.c:47:implicit declaration of function `int outb(...)' [/quote]

hat jemand einen vorschlag ? *hoff*


Matze

Matzetronic
24-07-2001, 17:13
*grummel*
include --) stdio.h, iostream.h

matze

jgbauman
24-07-2001, 22:44
wie schon oben erwaehnt:
#include &lt;asm/io.h&gt;
AFAIK noch mit -O2 uebersetzten.
Und das ganze natuerlich als root laufen lassen und mit ioperm() den Zugriff auf die Ports freischaltne (man ioperm)