Jestem w trakcie pisania aplikacji, której jednym z zadań jest pobieranie i wysyłanie danych do mikrokontrolera.
Korzystam z biblioteki synaser
http://synapse.ararat.cz/doc/help/synaser.TBlockSerial.html
Mam sobie takie oto wątek:
procedure TTrans.Execute;
begin
BT.Connect('COM4');
BT.config(9600, 8, 'N', SB1, False, False);
while not (Terminated) do
begin
x:= format('x%s%.1d%s%.1d%s%.1d%s%.1d%s%.1d%s%.1d',
[SgnStr[diods[1]>=0], diods[1], SgnStr[diods[2]>=0], diods[2],
SgnStr[diods[3]>=0], diods[3], SgnStr[diods[4]>=0], diods[4],
SgnStr[diods[5]>=0], diods[5], SgnStr[diods[6]>=0], diods[6]]);
Str := BT.RecvTerminated(1, 'x');
Synchronize(@Form_Text);
BT.SendString(x);
delay(100);
end;
end;
Wysyłanie działa bardzo spoko, reakcja jest prawie natychmiastowa. Jest natomiast problem z pobieraniem danych.
Kod powyżej działa nawet poprawnie, bo jest odczytywany string, w takiej formie w jakiej bym chciał by był odczyta, z tym, że jest on nieaktualny. Wygląda to tak, jakby istniał bardzo duży buffor, do którego są ładowane stringi z mikrokontrolera, a następnie odczytywane przez program, odczytywane wolnej niż generowane. W konsekwencji, czas jaki upływa od zmiany stringu, do jego pojawienia się na ekrania to około pół minuty(!).
Problem nie leży raczej po stronie mikrokontrolera, ponieważ, kiedy odpalam dowolny terminal, to tam wszystko działa prawidłowo i wysyłane stringi są natychmiast aktualizowane.
Próbowałem różnych funkcji z biblioteki synaser, jednak żadna nie działała tak jakbym tego oczekiwał.
Macie może pomysł jak mógłbym rozwiązać ten problem?