Współpraca czy prekursorstwo?
Ekosystem Arduino obejmuje sprzęt i oprogramowanie open-source opracowane i sprzedawane przez włoską firmę Arduino. Ogólna platforma zawiera zintegrowane środowisko programistyczne (IDE) o nazwie Arduino IDE, którego użytkownicy mogą używać do pisania, kompilowania i przesyłania kodu do płytki rozwojowej (zwykle wyposażonej w mikrokontroler AVR firmy Atmel).
Termin, który często pojawia się podczas dyskusji na temat systemów operacyjnych (OS) dla Arduino to „czas rzeczywisty”. Zasadniczo, system operacyjny czasu rzeczywistego (RTOS) został zaprojektowany z myślą o gwarancjach czasowych.
Aby spełnić te gwarancje czasowe, istnieją dwa rodzaje harmonogramów używanych przez system operacyjny do przełączania się między zadaniami: kooperatywny i preemptive. Systemy operacyjne oparte na współpracy wymagają specjalnych wywołań funkcji, aby umożliwić przełączanie kontekstu, zwykle w specjalnie zaimplementowanych funkcjach uśpienia, podczas gdy systemy operacyjne oparte na nakazie pierwszeństwa zwykle mają przerwania oparte na timerze, które mogą przełączać kontekst uruchomionego zadania w dowolnym momencie.
Plusy i minusy
Jak ze wszystkim w życiu, zawsze są kompromisy z decyzjami projektowymi. Preemptive OS są świetne, ponieważ zawsze będą sprawiedliwe z harmonogramem czasu. Oznacza to, że jeśli chcesz, aby wątek był uruchamiany co 10 ms, w normalnych okolicznościach, system operacyjny powinien być w stanie zagwarantować, że tak się stanie. Jednak uruchomienie systemu operacyjnego z opcją preemptive oznacza również większą złożoność kodu, ponieważ zamki muszą być używane do współdzielenia zasobów.
Kooperacyjne OS-y są z natury prostsze, ponieważ przełączają kontekst tylko wtedy, gdy są wywoływane przez określone procedury, takie jak metody delay lub sleep. Jednak to sprawia, że są one z natury niesprawiedliwe w priorytetyzacji zadań, ponieważ jeśli masz pętlę while w zadaniu, które nigdy się nie kończy, to inne zadania nigdy się nie uruchomią.
W tym artykule zajmiemy się pięcioma wyróżniającymi się systemami operacyjnymi dla Arduino, w tym rodzajem harmonogramu, na którym się opierają, tym jak dobrze są udokumentowane i jakie płytki Arduino będą obsługiwane.
CoopThreads
CoopThreads to kooperacyjny scheduler, który został zaprojektowany jako lekki, aby mógł działać na 8-bitowych mikrokontrolerach (w przeciwieństwie do pełnoprawnego RTOS). Obsługuje szeroką gamę Arduino, w tym mikrokontrolery oparte na AVR-, ESP32- i ESP8266.
Chociaż biblioteka jest uboga w dokumentację w porównaniu do niektórych z poniższych OS-ów, posiada kilka przykładów, które powinny pomóc użytkownikom zapoznać się z CoopThreads.
- Typ multitaskingu: Cooperative
- Poziom dokumentacji: Ograniczony, ale dobre przykłady
- Obsługiwane platformy: Szeroki zakres, w tym mikrokontrolery AVR, ESP32 i ESP8266
- Popularność: Niska
- Gdzie to znaleźć: GitHub
FreeRTOS
FreeRTOS jest bardzo popularnym systemem RTOS o otwartym kodzie źródłowym, który wspiera zarówno preemptive jak i cooperative scheduling, w zależności od tego jak jest skonfigurowany. Obsługuje on szeroką gamę mikrokontrolerów z rodziny Arduino, takich jak ATmega328, ATmega32u4, ATmega1284p i ATmega2560.
Popularność FreeRTOS oznacza, że uzyskanie wsparcia i znalezienie przykładów będzie bardzo łatwe, a poziom dostępnej dokumentacji jest doskonały. FreeRTOS oferuje również wiele dodatkowych funkcji, takich jak dynamiczne zarządzanie pamięcią, komunikacja między zadaniami (kolejki) i inne przydatne prymitywy.
- Typ multitaskingu: Preemptive lub cooperative
- Poziom dokumentacji: Doskonała
- Obsługiwane platformy: Ponad 40 architektur, w tym AVR (Arduino Uno, Nano, Leonardo i Mega)
- Popularność: Wysoka
- Gdzie go znaleźć: GitHub, FreeRTOS
HeliOS
HeliOS jest systemem operacyjnym z harmonogramem współpracy, który został zaprojektowany z myślą o łatwości użytkowania. Dzięki temu, że zdecydowano się na programowanie kooperacyjne, HeliOS powinien być łatwiejszy w pisaniu bezpiecznego kodu niż niektóre inne systemy operacyjne.
HeliOS obsługuje mikrokontrolery AVR-, ARM- i SAMD. Jest wciąż aktywnie rozwijany, ale może pochwalić się kilkoma dodatkowymi funkcjami, które można znaleźć we FreeRTOS, takimi jak zarządzanie pamięcią, kolejkowanie zadań (kolejki) i timery.
- Typ multitaskingu: Kooperacyjny
- Poziom dokumentacji: Fair
- Obsługiwane platformy: Dobry zakres mikrokontrolerów
- Popularność: Średnia
- Gdzie to znaleźć: GitHub
Simba
Simba jest wbudowaną platformą programistyczną, co odróżnia ją od innych wyborów w tym artykule, ponieważ obsługuje więcej niż tylko zarządzanie zadaniami. Poziom dokumentacji jest doskonały, podobnie jak liczba obsługiwanych platform.
Simba może się również pochwalić wsparciem dla sterowników urządzeń dla typowych peryferiów, takich jak SPI i I2C, plus systemy plików, sieci i logowanie. Obsługuje również wątki kooperacyjne lub z opcją preemptive, w zależności od tego jak jest skonfigurowana. GitHub dla Simby wskazuje, że jest bardzo popularny, co oznacza, że uzyskanie wsparcia będzie łatwiejsze.
- Typ multitaskingu: Preemptive lub kooperatywny
- Poziom dokumentacji: Doskonała
- Obsługiwane platformy: Większość głównych Arduino, plus długa lista innych płyt
- Popularność: Wysoka
- Gdzie go znaleźć: GitHub, Simba
TaskManagerIO
Wreszcie, TaskManagerIO to współpracujący scheduler, który obsługuje szeroką gamę płytek rozwojowych, w tym Arduino. Nie jest to pełny RTOS, ale harmonogram, który może być uruchamiany na innych opcjach z tej listy w celu uzyskania prosto zdefiniowanego multitaskingu. Jego kompatybilność z wieloma płytkami i systemami operacyjnymi sprawia, że jest to wszechstronny wybór dla każdego, kto potrzebuje współpracującego harmonogramu.
Dokumentacja jest obszerna, a fakt, że jest to algorytm kooperacyjny, a nie preemptive oznacza, że dla większości początkujących łatwiej będzie napisać bezpieczny kod bez użycia blokad. Biblioteka wydaje się być dość popularna na Githubie, a odpowiedzi na problemy są udzielane dość szybko.
- Typ multitaskingu: Cooperative
- Poziom dokumentacji: Doskonała
- Obsługiwane platformy: Kompatybilny z szeroką gamą płyt i systemów operacyjnych
- Popularność: Wysoka
- Gdzie to znaleźć: GitHub
Źródło: https://all3dp.com