Hallo zusammen!
Ich bin will gerade auf meinem PC eine serielle Schnittstelle einlesen
und in ein File abspeichern.
Ich hab meinen C-Code auch schon mehrere Male überprüft. Fine aber nicht
meinen Fehler. Ist ganz komisch. Mein Arduino schickt dauerhaft den Text
"test123" und ich kann auch über die Konsole die Werte lesen (nicht
gleichzeitig natürlich mit meinem Programm)
Aber mein Textfile bleibt leer.
Hat jemand eine Ahnung was ich falsch mache?
Die C-Lib puffert, und leert den Puffer nur bei "\n", was in Deinem Fall
nicht vorkommt. Die Puffer können recht groß sein - dann dauert es lange
bis Daten im File auf der Disk ankommen.
Kann man umgehen mit
Vielleicht als kleine Ergänzung, ich vermute, dass die fgets-Funktion
den Fehler hat. Weil wenn ich dort eine printf reinstecke, die nicht
ausgegeben wird. Wenn ich diese vor das gets() setze, schon.
Aber mehrere Beispiele die ich gesehen habe, machen es genauso....
Vorschlag: Ein fclose() am Ende kann Wunder bewirken.
Und meine Definition von fgets() sagt, dass ein String eingelesen wird.
Kennzeichen eines String ist das '\n' am Ende. Wenn das nicht kommt,
wartet fgets() bis zum Sankt Nimmerleins Tag und sammelt dabei fröhlich
Zeichen, rückt sie aber nicht heraus.
Georg G. schrieb:> wennn das nicht kommt,> wartet fgets() bis zum Sankt Nimmerleins Tag und sammelt dabei fröhlich> Zeichen, rückt sie aber nicht heraus.
Nö.
Wenn der Buffer voll ist, (die Parameter von fgets), dann kehrt fgets
zürück.
An dem fehlenden \n im buffer kann man dann erkennen, das die Zeile
nicht vollständig gelesen wurde.
Versuch mal Zeichenweise. Statt der while (1)
derFragende schrieb:> Kann es ein Problem der Baudrate sein?
Du hast geschrieben, dass du es mit einem Terminalprogramm richtig lesen
kannst. Also stimmt die Baudrate. Es wäre aber dennoch guter Stil, am
Anfang deines Programms die Baudrate explizit zu setzen.
Und noch ein Hinweis: Du gehst beim fprint() davon aus, dass im Buffer
ein String ist, Nullterminiert, das ist aber nicht zwangsläufig so. Das
Schreibergebniss kann also etwas seltsam werden.
Im Beitrag von 13:42 muss es natürlich "Zeile" und nicht "String"
heissen.
derFragende schrieb:> (...) Mein Arduino schickt dauerhaft den Text> "test123" und ich kann auch über die Konsole die Werte lesen (nicht> gleichzeitig natürlich mit meinem Programm)> Aber mein Textfile bleibt leer.> pFile=fopen ("/dev/ttyACM0", "r");
Wo setzt Du die Baudrate?
Grüßle
Volker
Georg G. schrieb:> Und noch ein Hinweis: Du gehst beim fprint() davon aus, dass im Buffer> ein String ist, Nullterminiert, das ist aber nicht zwangsläufig so.
fgets sorgt dafür, das der String Nullterminiert ist.
Im Fehlerfall wird fprintf nicht aufgerufen.