PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232 Schnitstelle unter LINUX ansteuern



DanDanger
15-12-2001, 16:59
Hallo Leute,
ich (relativer Linux-Neuling) Programmiere schon seit einiger Zeit in C++ unter Windoof. Ich wollte neulich ein kleines Windoof-Programm für die Serielle Schnittstelle unter LINUX Kompilieren, und musse feststellen, das jede menge Header-Dateien nicht vorhanden waren (z.B die conio.h) und er deswegen jede Menge Befehle wie gotoxy(x, y), ect.nicht mehr kannte :-(((

Meine Frage(n) : 1. Wo sind die Header-Files hin (so sachen wie iostream.h und stdlib.h kent er komischerweisse noch) ????

2. Unter dem guten alten DOS-QBASIC konnte man mit dem Open "Com1"..... Befehl ganz leicht auf die serielle Schnittstelle zugreifen. Kennt jemand eine Möglichkeit, auch genausoeinfach unter Linux auf die Schnittstellen zugreifen zu können (das ganze soll ne' Ansteuerung für eine Relaiskarte werde, ich muss also im Grunde genommen nur einzelne Werte an die RS232 Schnitstelle senden/empfangen können) ?????

Währe echt genial, wenn mir jemand Helfen könnte......

Neugierige Grüsse
DanDanger

geronet
15-12-2001, 17:16
Ein Windoof-Programm unter Linux kompilieren? Das funktioniert nicht so einfach. Hier ist ein Beispiel:





http://www.linuxforen.de/forums/showthread.php?s=&threadid=13747&highlight=lpic





Mein Programm mit Sourcecode findest du auf


http://www.zugspitzort.de/stefan/downloads/lpic.tgz



Einfach abschreiben :D

anda_skoa
16-12-2001, 14:40
Hi!

conio.h ist ja auch ein DOS spezifischer header :)
während iostream.h oder stdio header der c-lib sind.

Wenn du console User interface wie mit conio machen willst, mußt du unter Unix curses oder ncurses benutzen.

ad 2)
Die Serielle Schnittstelle ist wie jedes andere charcter device mit normalen file Befehlen benutzbar.
zB open("/dev/ttyS0", FLAGS);
ttyS0 -> Com1

siehe auch:
http://www.linuxdoc.org/HOWTO/Serial-Programming-HOWTO/

ciao,
_

DanDanger
16-12-2001, 16:17
Hi,
erstmal: Danke für die Antworten !
Was hat es denn mit der curses.h auf sich ??
Wenn ich die mit include einbinde, kompiliert der Compiler alles wunderbar, aber wenn ich eine cursres-Funktion (z.B initscr(), ect.) aufrufen will, meckert der Compiler, das er die Funktion gar nich' kennt (obwohl alles korrekkt eingebunden ist)...........
Währe nett, wenn mir da nochmal jemand Helfen könnte...:-)

Neugierige Grüsse
DanDanger

anda_skoa
16-12-2001, 23:37
Wäre hilfreich, wenn du die Fehlermeldung posten würdest :)

Wenns eine Meldung wie "implicit deklaration" ist, dann war die Funktion nicht in einem der includes definiert.

Wenn es eher "undefined reference" heißt, dann ist das keine Compilermeldung mehr, sondern bereits eine Fehlermeldung des Linkers.

Dann hat man vergessen die libary anzugeben, gegen die man linke möchte.

also zB

gcc -o myprog myprog.c -lcurses

Ciao,
_

DanDanger
16-12-2001, 23:48
Hi,
also mein Proggi sieht ungefähr so aus :

#include <iostream>
#include <curses>

void main() {
initscr(); // aus der curses.h
..........
addstr("Irgendein String"); //auch aus der curses.h
..........
}


Der Compiler meldet tatsächlich eine "implicit deklaration" von
initscr() und von addstr(...) :-(
Da die curses.h Lib. aber mit include eingebunden ist, hab' ich keine Ahnung, woran das liegen kann......
Ich compiliere übrigens mit dem Aufruf :
"g++ -o TestPogramm TestProgramm.cpp"

anda_skoa
17-12-2001, 08:54
Original geschrieben von DanDanger

#include <iostream>
#include <curses>


Das ist ein C header, die Include Direktive muß also
#include <curses.h> heißen.

Bei mir bricht das schon an dieser Stelle ab, ist mir schleierhaft, wie dein compiler da weiter kommt :o




void main() {

int main :)



Ich compiliere übrigens mit dem Aufruf :
"g++ -o TestPogramm TestProgramm.cpp"

da du anschliesend noch mit libcurses linken mußt, fehlt das noch:
g++ -o TestProgram TestProgram.cpp -lcurses

ciao,
_

DanDanger
17-12-2001, 10:01
Hi,
das mit der linker-Option -lcurses werde ich mal ausprobieren.
Muss ich diese linker-Optionen den noch bei anderen Header-Dateien angeben (ich bin bisher immer ganz gut ohne ausgekommen) ???

Neugierige Grüsse
DanDanger

anda_skoa
17-12-2001, 14:54
Ansich für jede library außer der Standard lib.

Ciao,
_

DanDanger
21-12-2001, 22:39
Hi Leute,
nochmals: Danke für die Antworten.
Leider funzt das mit der -lcurses Option immer noch nicht:-(
Merkwürdigerweisse scheint der Compiler die Funktion initscr() nicht zu kennen, initscr; (also ohne die Klammern) schluckt er jedoch Problemlos.....??????
Seeehr Merkwürdigt....
Kann mir vieleicht jemand sagen, ob es mehrere "Versionen" der Curses-Bibliothek gibt ??