Kurs FreeRTOS #1: wprowadzenie

FreeRTOS tutorial

Tym wpisem rozpoczynamy kurs dotyczący FreeRTOS, czyli najpopularniejszego systemu operacyjnego działającego na tanich, energooszczędnych, niewielkich mikrokontrolerach!

FreeRTOS jest systemem operacyjnym czasu rzeczywistego (ang. real time operating system) dla systemów wbudowanych. Został zaprojektowany z myślą o jak najprostszym i jak najmniejszym kodzie źródłowym, dzięki czemu możliwe jest jego uruchomienie na niewielkich mikrokontrolerach. Ponadto, wspiera wiele architektur, dzięki czemu portowanie na większość mikrokontrolerów jest całkiem proste. Jeszcze do niedawna był dystrybuowany na licencji GPLv2. W listopadzie 2017 roku, został przejęty przez Amazon i został włączony do projektu AWS (Amazon Web Services) open source – można spodziewać się rozwoju systemu pod kątem technologii IoT i współpracy z chmurą Amazona. Od tego czasu jest wydawany na licencji MITFreeRTOS kurs

Istnieją pochodne wersje FreeRTOS na płatnych licencjach:

  • openRTOS: dodatkowo mamy dedykowane wsparcie i gwarancję od wydawcy,
  • safeRTOS: przeanalizowana i przetestowana wersja jądra spełniająca surowe wymagania przemysłowe, medyczne i motoryzacyjne.

Wielozadaniowość

FreeRTOS podobnie jak większość systemów operacyjnych jest systemem wielozadaniowym, tzn. umożliwia uruchomienie i wykonywanie wielu zadań w tym samym czasie. Jeżeli dysponujemy tylko jednym rdzeniem procesora to wspomniana jednoczesność jest wyłącznie pozorna. W rzeczywistości, procesor w jednej chwili wykonuje tylko jedno zadanie, ale działa z bardzo dużą szybkością i przełącza się pomiędzy kolejnymi zadaniami na tyle sprawnie, że odnosimy wrażenie jakby wszystko wykonywało się równocześnie. Za przydzielanie czasu procesora poszczególnym zadaniom oraz ich przełączanie odpowiedzialna jest część systemu nazywana planistą (ang. scheduler) – algorytm szeregowania, określający, które zadanie będzie wykonywane jako kolejne. Przełączanie zadań nazywane jest przełączaniem kontekstu (ang. context switching).

RTOS – system operacyjny czasu rzeczywistego

System czasu rzeczywistego jest systemem, który oprócz poprawnej pracy pod względem logicznym musi także spełniać ograniczenia czasowe. Wyróżnić można dwa podstawowe typy:

  • soft RTOS: starają się realizować zadania najszybciej jak to możliwe, ale nie muszą zrealizować ich w ściśle określonym czasie. Stosowane w przypadku, gdy nie zrealizowanie zadania w wymaganym czasie może pogorszyć komfort pracy z urządzeniem, ale nie ma dużych negatywnych konsekwencji, jak zagrożenie zdrowia lub życia,
  • hard RTOS: zadania, odpowiedzi systemu na zdarzenia, muszą zostać zrealizowane w ściśle określonym czasie. W tym celu stosowane są deterministyczne algorytmy szeregowania, takie jak RMS (Rate-monotonic scheduling) czy EDF (Earliest Deadline First).

System z wywłaszczaniem

System FreeRTOS jest systemem z wywłaszczaniem (ang. preemptive kernel). Oznacza to, że w wyniku wystąpienia jakiegoś zdarzenia, aktualnie realizowane zadanie może zostać wstrzymane, po czym kontrolę przejmuje scheduler i wybiera kolejne.

W systemie FreeRTOS istnieje także możliwość pracy bez wywłaszczania. W takim wypadku to aktualnie wykonywane zadanie decyduje kiedy chce oddać kontrolę schedulerowi i umożliwić realizację innego. Wymaga to większego zaangażowania programisty – musi on tak zaimplementować wszystkie zadania, aby każde z nich otrzymało odpowiednią ilość czasu procesora. W przypadku systemów RT jest to rzadko stosowane, ponieważ zadania krytyczne często nie mogą czekać, aż inne zadanie skończy swoje działanie, tylko muszą być zrealizowane natychmiast po pojawieniu się asynchronicznego zdarzenia.

Podsumowanie

I to by było na tyle w tym wprowadzającym wpisie. Chciałem tutaj przedstawić najważniejsze pojęcia i pokazać z czym w ogóle będziemy mieli do czynienia w tym kursie. Większość rzeczy, o których wspomniałem w tym artykule będzie rozwijane w kolejnych częściach.

Stosowanie RTOS w większości projektów może okazać się sporym przerostem formy nad treścią. W wielu wypadkach będzie on całkowicie zbędny, ale uważam, że warto go poznać. Szczególnie, jeśli myślisz o zajmowaniu się programowaniem embedded zawodowo. Systemy operacyjne działające na mikrokontrolerach są bowiem bardzo szeroko stosowane przy sterowaniu procesami produkcyjnymi, w technice wojskowej, robotyce, branży motoryzacyjnej czy lotniczej. Wiele urządzeń, z którymi mamy do czynienia na co dzień, takich jak router, drukarka, zmywarka czy pralka także bardzo często działa w oparciu o niewielki system operacyjny – wraz z rozwojem IoT takich urządzeń będzie coraz więcej, a FreeRTOS + AWS może być jednym z wiodących rozwiązań!

Co istotne, wiele tematów poruszanych w tym kursie będzie miało zastosowanie także w innych systemach operacyjnych. Podstawowe mechanizmy wyglądają w nich zazwyczaj identycznie. Po zapoznaniu się z FreeRTOS, nawet rozpoczęcie przygody na większych platformach, z takimi systemami jak Linux czy QNX, będzie znacznie prostsze.

Jeśli wcześniej nie słyszałeś o systemach operacyjnych tego typu to mam nadzieję, że zainteresowałem Cię tym tematem. Do zobaczenia w kolejnym artykule 🙂

Kurs FreeRTOS #2: pierwszy pusty projekt