Skocz do zawartości
Andre

Wielozadaniowosc w Arduino

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?

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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()...

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...