Probleme mit serieller Schnittstelle

Gast #1728946
Hallo liebe Gemeinde,
ich habe ein Problem mit meiner seriellen Schnittstelle und/oder mit dem 
Programm.
Ich möchte das eingefügte Programm nutzen, um Daten aus einer Wärmpumpe 
zu übertragen.
Wenn ich jetzt einen normalen Pc verwende, übertragt er mir die Daten 
auch einwandfrei. Nun besteht bei einem gewöhnlichen Pc jedoch das 
Problem, dass dieser eindeutig zu viel Strom verbraucht. Also möchte ich 
das ganze mit einer NSLU2 realisieren. Debian habe ich auch schon 
"draufgeflasht".
Die Wärmpumpe war einerseits mit der seriellen Schnittstelle verbunden, 
die sich intern befindet (über einen Pegel-converter) und beim x. 
Versuch auch über einen Serial-USB Adapter. Beide Ergebnisse brachten 
nur ein Timeout.
Könnt ihr mir sagen, wo das Problem liegt?

P.S.: Das Programm sollte sich eigentlich im Anhang befinden.

Gruß,
Lienen
Angehängte Dateien:
Aus gen.c:
1
  r = select(fd+1, &inFds, NULL, NULL, &t);
2

3
  if (r == 1)
4
  {
5
    l=read (fd, b, 1);

Ich denke, Deine Prüfung des Rückkehrwerts (r) ist falsch.  Zunächst 
solltest Du einmal getrennt auf -1 testen, um Fehlermeldungen 
abzufangen.  Timeout ist es nur, wenn 0 zurückgegeben wird; Du meldest 
aber Timeout bei allen Werten != 1.

Dann aber sagt der Rückkehrwert (r) (wenn kein Fehler aufgetreten ist) 
aus, wie viele Bits in allen drei Sets (also auch denen, an denen Du 
nicht interessiert bist und die NULL sind) gesetzt sind.  Da Du zum 
Lesen und Schreiben geöffnet hast, sind das mindestens mal schon 2 Bits, 
also würde ich 2 erwarten und auf > 0 prüfen.

EDIT:  Streiche den letzten Absatz; ich habe gerade nachgeschaut und mit 
NULL übergebene Sets zählen nicht.  Dennoch würde ich anders auf Fehler 
testen und Fehler nicht dem Timeout zuschlagen.
Gast
> Beide Ergebnisse brachten nur ein Timeout.

Bei dir sind alle Rückgabewerte außer 1 ein Timeout. Vielleicht gibt es 
aber auch irgendeinen Fehler, den du deshalb nicht bemerkst. Teste mal, 
ob der Rückgabewert -1 ist und lass dir dann die Fehlermeldung ausgeben.
Übrigens: Wozu dienen diese Massen an stty-Aufrufen?
Vielen Dank für eure Bemühungen :)
Das Problem hat sich jedoch selbst aus der Welt geschafft.
Ich habe nochmal alle Verweise auf die Serielle Schnittstelle überprüft 
und musste feststellen, dass nicht alle auf ttyUSB0, sondern ein Punkt 
noch auf dem Ursprünglichen ttyS0 eingestellt war.
Trotzdem Danke!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.