Das Problem ist nur folgendes: Das im Wiki beschriebene Code-Beispiel funktioniert nur einmal pro Session, sprich wenn ich Linux gestartet habe, funktioniert das Programm. Sobald ich es im Terminal mit STRG-C unterbreche und nochmal starte, bekomme ich nur eine endlos lange Schlange an
Code: Alles auswählen
00 00 00 00 00
Ich bekomme erst wieder eine brauchbare Ausgabe, wenn ich Linux neustarte. Dann funktioniert es wieder, allerdings eben nur einmal, dann fängt der ganze Spaß wieder von vorne an. Ich hab nun ein wenig Code hinzugefügt, um etwaige Fehlermeldungen zu erhalten:
Code: Alles auswählen
program serialtest;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes,SysUtils,Synaser
{ you can add units after this };
var
ser: TBlockSerial;
begin
ser:=TBlockSerial.Create;
sleep(1000);
try
ser.Connect('/dev/ttyUSB0');
Sleep(1000);
ser.config(1200, 7, 'N', SB1, False, False);
Sleep(1000);
Write('Device: ' + ser.Device + ' Status: ' + ser.LastErrorDesc +' '+
Inttostr(ser.LastError));
Sleep(5000);
while True do
Write(IntToHex(ser.RecvByte(10000), 2), ' ');
finally
ser.free;
end;
end.
Im Falle der Fehlfunktion gibt mir die Console dabei folgendes aus:
Code: Alles auswählen
Device: /dev/ttyUSB0 Status: Bad file number 9
Für alle, die sich jetzt gerade fragen, weshalb da /dev/ttyUSB0 steht: Da mein Laptop leider keine serielle Schnittstelle hat, muss ich einen USB zu seriell Adapter von Digitus (die USB 1.1 Variante) verwenden. Als Linux ist bei mir Ubuntu 8.04.1 im Einsatz.
Apropos: GTKTerm hat keine Probleme mit der Schnittstelle. GTKTerm kann ich pro Session endlos oft aufrufen, es liest mir immer korrekt die serielle Schnittstelle aus.
Ich hoffe, ihr könnt mir helfen!
mfg