Pierwszym mega podstawowym problemem jaki tu widzę to jest fakt, że ty próbujesz programować totalnie LINIOWO ... i to cię gubi a wręcz uniemożliwia żeby jakkolwiek to rozwinąć ... A liniowo piszesz soft zarówno w procku ... ale także w PC a to to już katastrofa niestety.
Przyznam też, że chociaż próbowałem to w ogóle nie rozumiem tego fragmentu kodu w Bascomie ... ale też bascomem to ja zajmowałem się już chyba 6 lat temu więc praktycznie nic nie pamiętam... Chociaż ... wiem że i w Bascomie można sobie programować w oparciu o zdarzenia i sam to kiedyś robiłem ... no ale nie taką liniową funkcją INKEY()
-------------------------------------------------------------------------------
ciężko mi zatem pomóc bo ty tutaj ściśle sprzęgasz komunikację procka z programem na PC a jak się z jednej strony źle pisze to z drugiej ciężko nawet reagować
Mi zaś ciężko podpowiadać jak rozwiązać coś w Bascomie - nie to że nie chcę tylko po prostu nie wiem - nie pamiętam na dzisiaj. Tu musi ktoś z Bascoma może coś podpowiedzieć .... ?
Ty nawet sam potrafisz dostrzec i DOKŁADNIE określić swój problem, bo piszesz:
MaciejF napisał(a):
Problem takiego rozwiazania polega na tym ze z gory musze znac ilosc znakow wyslanych przez uC do konkretnego Labela czy Panelu.
I masz tu 100000% racji
więc może jednak czas na próbę nauki jak to robić w sposób "nieblokujący" w oparciu o zdarzenia .... ?
Od strony procka to mógłbym ci polecić Greenbooka i tam opisaną komunikację przez RS232 no ale jaki to ma sens jeśli ty tworzysz w Bascomie ?
MaciejF napisał(a):
Wolałbym wysyłać z uC ciągiem wszystkie dane rozdzielane separatorem a w aplikacji rozdzielać je
I to jest dobry pomysł ... dobra droga - ważne że to już przynajmniej czujesz przez skórę ... dalsze kroki musisz podjąć sam
Bo procek powinien formować jakieś dane, zaś raz na sekundę jakaś procedura typu zdarzenie wywoływane niezależnie od pozostałej części programu powinna je zbierać, formować w ramkę ASCII i wysyłać do PC. To NAJLEPSZA droga ... Ale jeśli ty na razie jesteś na etapie GoSub , Goto to hmmm no może być to ciężko zrealizować ... a przecież nawet Bascom ma funkcje - tylko nie wiedzieć czemu mnóstwo ludzi piszących soft w tym języku z nich nie korzysta na rzecz właśnie goto, gosub, goto, goto, gosub itd Nie mówię tego broń Boże ironicznie - raczej wskazuję kierunek ...
W programie na PC - też kompletnie zapomnij o takim pisaniu linijka po linijce odbieraniu pojedynczych znaków czy coś bo - tu sam widzisz że wychodzi ci MASAKRA po prostu MASAKRA - tak nie można...
Zapoznaj się z komponentem z którego korzystasz i mogę się założyć, że posiada on zdarzenia - np OnRxData czy coś w tym stylu - i to te zdarzenia trzeba oprogramować
bo pomyśl sobie - jakbyś miał odebrać milion znaków z UART to byś pisał milion linijek w kodzie ? Ma to jakiś sens ?
Zdarzenia są po to żeby wyłapać nadlatujące dane - dostajesz je pewnie w jakimś buforze który przekazywany jest w argumencie funkcji zdarzenia .... i tam trzeba je parsować ... Gorzej oczywiście jeśli ty z kolei z Bascoma - cykasz je też w sposób liniowy no i się wszystko w końcu zacina i nic nie działa jak trzeba a programu nie ma jak rozbudować ...
Nawet jeśli zacząłbym poradniki Delphi a tobie udałoby się to wdrażać jakoś w Lazarusie (bo ja nie znam Lazarusa ni w ząb) .... to co z tego - jeśli ja będę pokazywał komplementarne przykłady od strony procka jeśli chodzi o komunikację w C w oparciu właśnie o zdarzenia opisane już dawno w GB ?
w tym jest właśnie problem