Synaser Daten Empfangen unter Linux..

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Synaser Daten Empfangen unter Linux..

Beitrag von corpsman »

Servus,

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;
 
So wie es aussieht scheint, dies aber meine Anwendung durcheinander zu bringen. Und zwar immer genau dann, wenn ich auf die Festplatte schreibe. Was ich denke damit zusammenhängt, das RecvByte letztendlich auf die Unit fileutilh.inc zugreift.

Nun gehe ich davon aus, dass ich etwas falsch mache mit meinem Code. Mit

Code: Alles auswählen

 
fserial.CanRead(Timeout)
fserial.WaitingDataEx
 
habe ich es ebenfalls schon probiert. Aber auch hier stürzt meine Anwendung regelmäßig ab und blockiert die Uart dermasen, dass ich den Rechner neu starten mus, damit ich wieder mit Synaser auf die Uart zugreifen kann (stets kommt Fehler 9991 = already owned).

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
--
Just try it

Linkat
Lazarusforum e. V.
Beiträge: 561
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: Synaser Daten Empfangen unter Linux..

Beitrag von Linkat »

Hallo Corpsman,
vielleicht ist Dein Timeout zu knapp eingestellt. Ich arbeite mit Werten von 100 - 500 ms.
Viel Erfolg.

Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Synaser Daten Empfangen unter Linux..

Beitrag von corpsman »

Servus Linkat,

Ich weis mittlerweile, dass es an fpSelect liegt.
Synaser ruft dies auf, und mein 2. Tread ebenso. Wenn ich die Dateien Speichere kommts dann zum Chaos. Ich werde das nun so umbauen, dass beim Speichern der 2. Thread blockiert wird. Dann müsste es gehen *g*.
--
Just try it

Antworten