[LUGA] Mit freundlicher Unterstützung von:
OCG

Mail Thread Index


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [luga] EOF bei seriellen Verbindungen



On Mon, Apr 03, 2017 at 02:09:33PM +0200, Bernd Petrovitsch wrote:
> 
> $PROGRAMM macht /dev/tty17 mit open() auf (mit O_NONBLOCK) und
> konfiguriert Baud-Rate (4800), 8N1, keine Flow-Control (weil keine
> Leitungen für HW-Flow-Control und keine Intelligenz auf der anderen
> Seite für Xon/Xoff - es macht i.Ü. auch applikativ keinen Sinn - 8 Byte
> alle halben Sekunden in die eine Richtung, 15 Byte alle Sekunden in die
> andere Richtung).
> 
> Dann hängt der Filedescriptor im select() und ggfs. wird - mit read() -
> gelesen was daher kommt (bzw. auch geschrieben - auch über select() und
> non-blocking write()s - da passieren auch keine Fehler o.ä.).
> 
> Allerdings kommt da gelegentlich auch schon mal EOF daher.
> Nur wie soll das bei einer primitiven seriellen Schnittstelle überhaupt
> passieren können?

Deine obige config enthält kein 'set tty to raw mode' o.ä. Solange Du im
cooked mode bist hast Du ein bestimmtes Zeichen (konfigurierbar, oft ein
Ctrl-D) das ein EOF am Terminal generiert. Vermutlich hast Du Deine
serielle nicht transparent (raw) konfiguriert.

> Die seriellen Leitungen sind BTW hard-wired, d.h. "abstecken",
> "anstecken" o.ä. als solches geht nicht/gibt es nicht.
> Und das andere Ende ist auch garantiert aktiv/lebt und liest bzw.
> schreibt drauf (ja, das wurde explizit mitgesnifft).

stty -cooked
bzw.
stty raw

Das setzt die ganzen brkint, ignpar, istrip, icrnl, ixon opost isig
icanon eof-character (!!!) eol character:

Aus man stty:

raw    same as -ignbrk -brkint -ignpar -parmrk  -inpck  -istrip
       -inlcr -igncr  -icrnl   -ixon   -ixoff   -iuclc  -ixany
       -imaxbel -opost -isig -icanon -xcase min 1 time 0

cooked same as brkint ignpar istrip icrnl ixon opost isig
       icanon,  eof and eol characters to their default values

Du willst üblicherweise auch nicht dass ein Ctrl-C als Interrupt-Signal
kommt oder ein backspace das letzte Zeichen löscht...

BTW: Ein Disconnect der seriellen merkt der Treiber üblicherweise garnicht.

lG Ralf
-- 
Ralf Schlatterbeck             email: ralf@zoo.priv.at



powered by LINUX the choice of a gnu generation
linux user group austria;
Suche
Suche
Letzte Änderung:
webmaster@luga.at
April 2017