Skocz do zawartości

Wielozadaniowosc w Arduino


Andre

Pomocna odpowiedź

Czy sample ze strony arduino.cc pt: Blink Without Delay mozna uznac za wielozadaniowosc, czy wielozadaniowosc to cos szerszego i dziala inaczej? Gdy chce kontrolowac w 1 czasie min 2 procesy? NA przemyslowym PLC nie ma z tym wiekszego problemu a tu nie wiem. Czy jest takie cos mozliwe na Arduino?

Link do komentarza
Share on other sites

Andre, też szukałem czegoś o wielowątkowości Arduino 🙂 google ma dość sporo odpowiedzi na ten temat. Wystarczy wpisać hasło np.: "Arduino wielowątkowość" i pierwsze 2 wpisy powinny dać już wystarczająco dużo informacji jak można zrealizować wątki w Arduino. Zerknij choćby tu: leOS2

Pozdrawiam.

Link do komentarza
Share on other sites

Wielozadaniowość nie musi być zawsze rozwiązana za pomocą wątków. Jest wiele możliwych podejść.

Przykład z blink without delay, to chyba najprostsze rozwiązanie, tak zwana pętla wydarzeń (event loop) -- robimy tylko jedną rzecz na raz, ale robimy to w małych porcjach, a kolejne zadania czekają na swoje wykonanie w kolejce. Można ten przykład znacznie rozwinąć i uogólnić.

Wątki to inne podejście -- tam trzymamy w pamięci jednocześnie wiele stanów aplikacji i przełączamy się pomiędzy nimi. Zazwyczaj robione jest to przez system operacyjny, którego na AVR-ach raczej brak, ale są jakieś wynalazki z namiastką tego (nie jestem pewien, czy na AVR daja radę).

Jeszcze innym podejściem jest wykorzystanie wielu mikrokontrolerów -- tak robi na przykład Propeller. Oczywiście nic nie zabrania zrobienia tak z Arduino na naszym robocie -- osobny mikrokontroler do sterowania serwami, osobny do czytania stanu czujników, etc.

Link do komentarza
Share on other sites

Dzieki za rady i odpowiedzi. Kombinuje ze pomocne w uzyskaniu Wielowatkowosci moga tez byc Interrupty - napisze po amatorsku - 'biegaja w tle' i jak sie cos wydarzy (np ANIN-czujka temperatury trigg) przerywaja mi proces. Czytam o tym na stronie producenta opis funkcji attachInterrupt()...

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Problem z przerwaniami jest taki, że jak sama nazwa wskazuje, przerywają działanie twojego programu w losowym momencie, kiedy wydarzy się jakieś zewnętrzne zdarzenie. Wynikają z tego dwie główne bolączki: 1) nigdy nie wiesz w jakim stanie akurat będzie twój program kiedy wykona się przerwanie, 2) przerwanie może się wykonać w jakimś krytycznym czasowo momencie i spowolnić wykonanie twojego programu.

Dlatego często robi się tak, że procedura obsługi przerwania jest minimalna i ustawia jedynie jakąś flagę (albo dodaje wydarzenie do kolejki), a cała logika dzieje się w głównej pętli (sprawdzanie flagi i odpowiednia reakcja). W ten sposób kod w przerwaniu wykonuje się szybko i nie wpływa bezpośrednio na resztę programu, dzięki czemu zachowuje się on bardziej przewidywalnie.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.