Ich verwende viel und häufig Synaser. Doch seit neuestem bekomme ich seltsamme abstürze, welche ich auf die Synaser Unit zurückführe.
Mein OS ist Kubuntu 13.10 (32-Bit).
Worum es geht. Ich verwende zum Lesen der Uart einen TTimer (interval = 100ms) dieser ruft folgenden Code auf :
Code: Alles auswählen
Function TUart.Read(Timeout: Integer = 10): String;
Var
b: Boolean;
by: Byte;
Begin
result := '';
If Not assigned(fserial) Then exit;
b := true;
While b Do Begin
by := fserial.RecvByte(Timeout);
If fserial.LastError = 0 Then Begin
result := result + chr(by);
End
Else Begin
b := false;
End;
End;
End;
Nun gehe ich davon aus, dass ich etwas falsch mache mit meinem Code. Mit
Code: Alles auswählen
fserial.CanRead(Timeout)
fserial.WaitingDataEx
Somit stellt sich mir die Frage, wie Implementiert man es richtig.
Ich möchte in einem Memo alles anzeigen was an der Uart ankommt. Da ich die Daten evtl. Als Hex Zahlen darstellen will wäre es Optimal, wenn die Uart Empfangsroutine in Byte Arbeitet.
Mit allem Code oben, habe ich versucht eben genau dies zu realisieren.
Übrigens, wenn ich hterm für Linux Lade funktioniert die Uart, sogar noch nachdem die Synaser abgestürzt ist. Hier scheint FPC irgend einen Lock zu setzen, der nur beim Reboot gelöscht wird.
Gruß
Corpsman