Bonsoir à toutes et à tous,
Dans une application GPS que je développe, j'utilise le composant TBlockSerial pour lire les infos que me délivre mon module GPS (via Bluetooth). Avec mon PC sous Windows, cela se passe bien, mais avec mon Raspberry Pi3B (Raspbian Stretch), ça plante au bout de quelques minutes avec le message d'erreur "'Timeout during operation" Voilà le code que j'exécute dans un thread:
Grâce au débogueur, qui fonctionne bien dans le thread, je vois que ça tourne en boucle à l'intérieur de mon "while" et, comme à chaque lecture, l'erreur persiste, je passe à chaque tour par mon " InfoNMEA:=InfoNMEA;" que j'ai mis là juste pour mettre en évidence le problème. NOTA : à ce moment, InfoNMEA est une chaîne vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 procedure TMyThread.Execute; begin {$IFDEF WIN32} PortCOM.Connect('COM21'); // Port de mon PC sous Windows {$ENDIF} {$IFDEF LINUX} {$IFDEF CPUARM} PortCOM.Connect('/dev/rfcomm0'); // Port de mon Raspberry {$ELSE} PortCOM.Connect('/dev/ttyS21'); {$ENDIF} {$ENDIF} PortCOM.Config(4800, 8, 'N', 1, False, False); while not Terminated do begin // Réception de 6 trames toutes les secondes InfoNMEA:= PortCOM.Recvstring(2000); // Le fait de mettre autre chose que 2000 ne change rien à l'affaire if PortCOM.LasrError = ErrTimeout then InfoNMEA:= InfoNMEA; Synchronize(@Showstatus); end; PortCOM.CloseSocket; FreeAndNil(PortCOM); end;
Question, comment sort-on de cette boucle infernale ?
Cordialement.
Pierre
Partager