Pytanie:
Wielowątkowość z Arduino
Omar Hussein
2015-12-09 04:18:51 UTC
view on stackexchange narkive permalink

Cóż, właśnie zacząłem uczyć się koncepcji wielowątkowości w C ++ i od razu przyszło mi do głowy kilka pytań dotyczących możliwości używania wielowątkowości z mikrokontrolerami w ogóle, a konkretnie z Arduino.

Czy to jest czy można używać wielowątkowości na wszystkich typach płyt Arduino?

Wielowątkowość oznacza również współbieżność? Jeśli tego nie zrobisz, procedury przerwań wyzwalane przez licznik czasu w równych odstępach czasu mogą obejmować wiele podobnych funkcji na procesorach AVR.
Możesz wypróbować tę bibliotekę https://github.com/mikaelpatel/Arduino-Scheduler
Cztery odpowiedzi:
Mikael Patel
2015-12-09 05:54:51 UTC
view on stackexchange narkive permalink

W Cosa możesz znaleźć następujące wsparcie dla programowania współbieżnego:

  1. Zdarzenia, procedury obsługi przerwań interfejsu
  2. Jobs, opóźnione, okresowe lub alarmy, działają z nami, timery poziomu ms i sekund (Watchdog, RTT lub RTC).
  3. FSM, funkcja stanu obiektu
  4. ProtoThreads, wskaźnik stanu obiektu
  5. Threads, semafory itp., wiele stosów
  6. UML Kapsuły i łączniki, programowanie oparte na zależnościach

Istnieje wiele przykładów użycia te. Dobrym punktem wyjścia są szkice Blink. Istnieje nawet wielowątkowy przykład Blink z wątkiem, który włącza / wyłącza diodę LED i wątkiem kontrolera, który okresowo zmienia czas migania. Rozmiar stosu wątków wynosi tylko 64 bajty i działa nawet na ATtiny.

Przy wszystkich wewnętrznych modułach sprzętowych AVR (takich jak SPI, TWI, UART, itp.) istnieje wiele możliwości współbieżności.

Dostępna jest również biblioteka Scheduler dla rdzenia Arduino. To jest port wątków Cosa. Więcej informacji znajdziesz na githubie.

Pozdrawiam!

W jakiej kolejności jest narzut pamięci Cosa? 100 KB pamięci flash i 20 KB pamięci RAM?
Zależy od tego, czego używasz / dołączasz. Ogólnie rzecz biorąc, „narzut” jest mniejszy niż w przypadku rdzenia Arduino dla podobnej funkcjonalności. Najlepszym sposobem, aby się tego dowiedzieć, jest wykonanie kilku przykładowych szkiców.
dlu
2015-12-09 04:36:05 UTC
view on stackexchange narkive permalink

Naprawdę szybka odpowiedź brzmi „może” - zależy to od tego, co rozumiesz przez „Arduino”, a co przez „wątek”. Odpowiedź prawdopodobnie będzie inna w przypadku Arduino opartych na AVR (Uno i wsp.) W porównaniu z Arduinami opartymi na ARM (Due i wsp.) - spodziewałbym się, że będzie znacznie lepsze wsparcie sprzętowe dla "prawdziwych" wątków na procesorach ARM . Kolejne pytanie, na które chciałbyś odpowiedzieć, to „dlaczego wątki?” Czy chcesz, aby abstrakcja pomogła Ci uporządkować kod? A może faktycznie potrzebujesz „prawdziwych” wątków?

Zanim pojawiła się sprzętowa obsługa wątków (np. W połowie lat 80.) istniały implementacje wątków użytkownika, wydaje się możliwe, że można je dostosować do działania nawet na AVR. Spodziewałbym się, że będzie to coś w rodzaju projektu.

Istnieje pakiet wątków o nazwie Protothreads, który może być interesujący. W opisie czytamy: „Prototwątki to niezwykle lekkie, pozbawione stali nici przeznaczone do systemów z bardzo ograniczoną pamięcią”. Znalazłem kolejne pytanie dotyczące prostego użycia Protothreads, więc wygląda na to, że możesz znaleźć kilku innych użytkowników tego pakietu.

Możesz również znaleźć przydatne informacje w tym Stack Exchange pytanie w wątkach, szybkie wyszukiwanie „Wątków użytkownika C” znalazło tę implementację na pierwszej stronie - i jestem pewien, że jest ich o wiele więcej.

Wyszukiwanie w „wątkach Arduino” znalazło kilka bardziej interesujących wyglądających linków:

Jeśli potrzebujesz tylko wątków, małej i niedrogiej płyty oraz pinów I / O, warto rozważyć Raspberry Pi - Linux obsługuje wątki.

Dobra odpowiedź. Warto również zauważyć, że nawet przy obsłudze wątków sprzętowych system operacyjny lub przynajmniej część oprogramowania będzie prawdopodobnie musiał zarządzać wątkami i planować je.
@Mlagma: O ile wiem, każdy odsyłacz w tej odpowiedzi przedstawia implementację wątków, które są statycznie wkompilowane w program użytkownika. Arduino obsługuje tylko ten jeden program. Czy możesz podać choćby jeden przykład systemu operacyjnego lub innej warstwy oprogramowania, inny niż program użytkownika?
@Mlagma, może to być tak proste, jak coś w rodzaju programów i przerwań. Nie spodziewam się, że znajdę coś więcej niż być może biblioteka, która implementuje podstawowy harmonogram - ale nawet tego nie znalazłem.
dda
2017-01-16 15:43:11 UTC
view on stackexchange narkive permalink

Jest jeden produkt podobny do Arduino, który z pewnością może obsługiwać wielowątkowość, ponieważ jest wielordzeniowy: Shield Buddy TC275.

Core setup and loop functions

Zasadniczo masz trzy funkcje setup () i trzy funkcje loop () . Prawdziwa wielowątkowość.

+1 za znalezienie tego. Doskonałe wyżywienie, ale nie tanie. Jednak dałoby to [AeroQuad] (http://aeroquad.com/) nowe życie ..!
Tak, było to na moim radarze od jakiegoś czasu, ale koszt ... Mam nadzieję, że chińscy twórcy klonów wkrótce to znajdą :-)
Nie jest jednak tak kompatybilny, jak początkowo sądziłem, z powodów, które są _ teraz_ oczywiste. Prosta rekompilacja może nie wystarczyć. Będzie to zależeć od złożoności kodu, tj. Czy został użyty asembler. Zobacz [Czy ktoś używał Shield Buddy (zamiast Arduino Mega2560) jako płyty hosta RAMPS 1.4?] (Http://3dprinting.stackexchange.com/questions/3410/has-anyone-used-a-shield-buddy -en-lieu-of-a-arduino-mega2560-as-the-ramps-1-4)
Tak, ASM może być problemem. Ponadto dostosowanie kodu do środowiska 3-rdzeniowego, nawet bez ASM, wymagałoby trochę pracy. Ale myślę, że dla nowego projektu mógłby być naprawdę interesujący.
Flanker
2017-01-18 02:40:46 UTC
view on stackexchange narkive permalink

Używam Atomthreads na Atmega128, jest bardzo lekki z minimalnym narzutem. Miej harmonogram zadań, mutex, semafory i kolejkę. Kod jest przenośny, ale może wymagać pewnej konfiguracji, aby używać go z Arduino IDE (używam Atmel Studio). Używam głównie harmonogramu zadań, nigdy nie miałem problemów. Właśnie zaznaczone, rozwój jest nadal aktywny.

Re: * „bardzo lekki” *. Czy możesz to określić ilościowo? Czy jest to 8 KB pamięci flash i 600 bajtów pamięci?


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...