Symulator wyswietlacza LCD, problem z kolejkami

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
PeGaz
Posty: 5
Rejestracja: 17 cze 2014 20:27
Wersja środowiska: LabVIEW 2013

Symulator wyswietlacza LCD, problem z kolejkami

Post autor: PeGaz »

Witam.
Wykonuje właśnie aplikacje do symulacji wyświetlacza LCD. Aplikacja za pomocą karty pomiarowej będzie podłączona do płytki obwodu drukowanego w miejscu gdzie powinien być podłączony wyświetlacz, czyli będzie odczytywała to co mamy na wejściu wyświetlacza. Ponieważ mój poprzedni kod ( co ciekawe działający prawidłowo) wyglądał mniej więcej tak:
poplatany_program.jpg
Więc postanowiłem go przepisać wykorzystując architekturę producent/konsumer. Podzieliłem program na 3 części: producenta który będzie zapisywał każda chwilową wartość na złączu wyświetlacza, producenta-konsumenta który będzie odczytywał wartości chwilowe i zapisywał do 3 różnych kolejek wartości zatrzaśnięte zboczem narastającym na jednym z złącz i konsumenta który będzie przetwarzał zatrzaśnięte dane i wykonywał odpowiednie instrukcje lub drukował odpowiednie znaki na wyświetlaczu.
Opiszę teraz część 2 dla większej jasności: kolejka otrzymuje tablicę 8 elementową 1-D boolowską, zapisuje wartość jednej z komórek do jednej kolejki i w zależności od wartości tej komórki zapisuje dane w postaci 4 elementowej 1-D tablicy boolen do 2 kolejek dla T i do jednej dla F. Sprawdziłem i zapis jest realizowany 458 razy, tyle ile potrzebuje.
Ale pętla nr 3 wykonuje się już tylko 192 razy, czyli grubo ponad połowę danych jest gubione. Czemu tak się dzieje?
Widok 2 pętli:
kolejkowy_blad.jpg
Widok 3 pętli:
kolejkowy_blad_2.jpg
Z góry dziękuje za pomoc.
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Symulator wyswietlacza LCD, problem z kolejkami

Post autor: Pitol »

Zapamiętaj życiową prawdę:

LEPSZE JEST WROGIEM DOBREGO !!!

No ale wracając do Twojego problemu. Program jest dość rozbudowany i wątpię czy znajdzie się ktoś kto by chciał to całe ogarnąć.
W każdym bądź razie mam jedno podejrzenie.
Piszesz:
(...) i w zależności od wartości tej komórki zapisuje dane w postaci 4 elementowej 1-D tablicy boolen do 2 kolejek dla T i do jednej dla F.
Czyli w jednym z tych Case'ów w pętli nr 2 raz piszesz do trzech kolejek, a raz tylko do jednej. Mam rację?
Jeśli nie to nie czytaj dalej :D
Jeśli tak to.... popatrz sobie na pętlę nr 3.
Masz tam trzy bloczki Dequeue Element. Zastanawiałeś się kiedyś jak one działają?
Bloczek ten CZEKA na pojawienie się elementu w kolejce. Jeśli nic nie dostał to czeka... i czeka... i będzie czekał (chyba, że mu timeout zdefiniujesz).

Z tego co widzę to każdą z tych trzech kolejek zapełniasz w inny sposób. Więc jeśli kolejka nr 1 napędzana jest 100 razy a kolejki nr 2 i nr 3 napędzane są 50 razy, to pętla nr 3 wykona się tylko 50 razy.

Dla testu zrób sobie dodatkową pętlę While, dociągnij tam referencje Twoich kolejek i dopnij do nich bloczki Get Queue Status. Zobaczysz, jak w kolejkach gromadzą się dane i czy przypadkiem któraś z nich się nie opróżniła szybciej niż pozostałe.

EDIT: Inny test możesz przeprowadzić w taki sposób, że wygeneruj tablicę samych wartości TRUE i taką spróbuj przesłać. Jeśli wszystkie kolejki będą napędzane w ten sam sposób powinieneś mieć poprawną ilość iteracji pętli nr 3.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
PeGaz
Posty: 5
Rejestracja: 17 cze 2014 20:27
Wersja środowiska: LabVIEW 2013

Symulator wyswietlacza LCD, problem z kolejkami

Post autor: PeGaz »

Już wszystko, rozumiem, poprawiłem i działa. Po prostu przekombinowałem, żeby w drugiej pętli zamiast do 3 kolejek wrzucało do jednej. Jeszcze to wszystko opisać, pozwijać do SubVI'ajów i będzie git. Dziękuje za uwagę co do sposobu wykonywania się kolejki i co kiedy mamy kilka kolejek w jednej pętli.
ODPOWIEDZ