Zugriff auf serielle Schnittstelle erst nach cat /dev/ttyXXX

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Zugriff auf serielle Schnittstelle erst nach cat /dev/ttyXXX

Beitrag von vobie » 02.10.2010 13:48:57

hallo,
ich bin absoluter Neuling was C++ angeht .
Nun habe ich ein kleines Programm geschrieben das libserial nutzt.
Mit diesem Programm möchte ich einen String zu einem µC schicken.
Funktioniert soweit alles gut, einziges Problem, ich muss erst ein cat /dev/ttyUSB0 absetzen bevor ich
was an den µC schicken kann.
Was fehlt mir noch im Programm ??

Code: Alles auswählen

#include <SerialStream.h>
#include <iostream>
//#include <string>
#define PORT "/dev/ttyUSB3" //Serial Port

//using namespace std;
using namespace LibSerial;

SerialStream serialstream;

void open()
{
	serialstream.Open(PORT);
    serialstream.SetBaudRate(SerialStreamBuf::BAUD_57600);
	serialstream.SetCharSize(SerialStreamBuf::CHAR_SIZE_8);
	serialstream.SetFlowControl(SerialStreamBuf::FLOW_CONTROL_NONE);
	serialstream.SetParity(SerialStreamBuf::PARITY_NONE);
	serialstream.SetNumOfStopBits(1);
	//serialstream.SetVTime(1);
       //serialstream.SetVMin(100);
}


int main()
{
 open(); //open Serial Port

serialstream << "A,B,C" << std::endl ;

serialstream.Close() ;
return 0;
}
bin für jede Hilfe dankbar
gruß
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Zugriff auf serielle Schnittstelle erst nach cat /dev/tt

Beitrag von Danielx » 02.10.2010 13:53:33

Hm, meinst du wirklich einmal ttyUSB0 und einmal ttyUSB3?

Gruß,
Daniel

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Re: Zugriff auf serielle Schnittstelle erst nach cat /dev/tt

Beitrag von vobie » 02.10.2010 16:09:01

Auf meinem Test-System ist es /dev/ttyUSB3, sonst /dev/ttyUSB0
Aber das Problem ist unabhängig von ttyUSB0 oder .../ttyUSB3

ich glaube auch mal gelesen zu haben, dass man erst lesend auf die Schnittstelle zugreifen muss
um dann darauf schreiben zu können. Ob das stimmt weiß ich nicht. Und wenn dem so ist, wie kann ich einen kurzen Lesezugriff ins Programm ein bauen ?

Gruß
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Zugriff auf serielle Schnittstelle erst nach cat /dev/tt

Beitrag von cosmac » 02.10.2010 17:21:19

Hi,

verwendest du ausser RXD/TXD noch Steuer-/Handshake-Leitungen? DTR ist z.B. direkt nach dem Booten inaktiv. Was uns gleich zur nächsten Frage bringt: wie lange hält die Wirkung von cat an? Dass man erst lesen soll finde ich zwar überraschend, aber instinktiv hab ich das immer so gemacht um Müll vom Einstecken/Einschalten los zu werden, also denkbar wär's. Dafür hab ich select() mit time-out benutzt.

Dann gibt's da noch ein paar Dutzend Flags, ich benutze für open() O_NDELAY und O_NOCTTY; für die cflags CLOCAL und CREAD und den Rest auf 0. VMIN=1 und VTIME=0 könnte auch noch eine Rolle spielen.

Hast mal verschiedene USB/seriell-Adapter probiert? Der pl2303 läuft bei mir ganz gut, was ich von den Cypress-Teilen und noch einem längst vergessenen nicht sagen kann.
Beware of programmers who carry screwdrivers.

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Zugriff auf serielle Schnittstelle erst nach cat /dev/tt

Beitrag von Danielx » 02.10.2010 19:55:16

vobie hat geschrieben:Auf meinem Test-System ist es /dev/ttyUSB3, sonst /dev/ttyUSB0
Aber das Problem ist unabhängig von ttyUSB0 oder .../ttyUSB3
Dann beschreibe bitte sorgfältiger, so dass solche Nachfragen erst gar nicht nötig sind.
Denn zuerst hörte es sich so an, als ob du erst von ttyUSB0 lesen müsstest, bevor du auf ttyUSB3 schreiben könntest.

Gruß,
Daniel

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Re: Zugriff auf serielle Schnittstelle erst nach cat /dev/tt

Beitrag von vobie » 02.10.2010 21:49:46

Danke für die schnelle Antwort und Sorry für meine ungenaue Beschreibung am Anfang.
es werden nur die RXD/TXD Leitungen genutzt.
Das µC ist ein Arduino Duemilanove Board.
Ich bin mehr oder weniger nach dieser Anleitung vorgegangen http://devlog.bigmonachus.org/2008/08/i ... c-and.html
Mein Programm funktioniert nur wenn ich
1. cat /dev/ttyUSB3 im Terminal ausführe (ttyUSB0 oder ttyUSBxxx je nach Port an dem sich der µC gerade angemeldet hat )
2. Das Programm starte

Also vor jedem Programmstart einmal cat /dev/ttyUSBxxx ausführe.
Ich habe hier 5 PC mit Debian Testing, bei jedem das gleiche Verhalten :roll:

Schicke ich den String mit GTKterm, egal auf welchem PC zum µC funktioniert das Ganze Problemlos ?

Gruß
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Antworten