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
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.
> 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!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.