RTOS - Armata na muchę. ####################### W wielu projektach niepotrzebnie dodaje się RTOS niepotrzebnie komplikując projekt i wydłużając czas opracowania oprogramowania nie wspominając o wydłużonym czasie testowania. Równocześnie rośnie złożoność i wielkość oprogramowania nie wspominając o wzroście zapotrzebowanie na pamięć programu FLASH i danych RAM. Zacznijmy od prostej analizy kiedy na pewno będziemy musieli użyć RTOS-a. Będą to systemy klasy safety połączone z oprogramowaniem non safety. Będziemy musieli je od siebie izolować, choć i to można dokonać bez systemu czasu rzeczywistego. Niewątpliwie będą to urządzenia realizujące wiele połączeń równocześnie oparte np. na stosie TCPIP. Będą to również urządzenia w których zadania muszą  być obsługiwane w bardzo ścisłym reżymie czasowym. Przy sterowaniu urządzeń w czasie rzeczywistym. Jednak większość aplikacji nie wymaga RTOS-a. Nawet te dla czasu rzeczywistego. Chciałbym przedstawić "packę na muchy" w miejsce używanej "armaty". Dla tych którym wystarcza prosty szybki i zajmujący bardzo mało miejsca scheduler typu periodic tasks dla zadań wywoływanych okresowo. Chcę przedstawić rozwiązanie, które chyba częściej wykorzystuję niż RTOS. Jego podstawowe zalety to: - lekki; - szybki; - bardzo prosty; - brak wywłaszczeń ułatwia debugowanie kodu; Ma również wady: - jego czasy są ustalane w tak zwanym CT (Compile Time) i nie da się ich zmienić w czasie RT (Run Time); - taski wywoływane przez niego muszą być typu maszyna stanowa lub funkcja lecz bez możliwości użycia dealy lub oczekiwania na zdarzenie; - nie wywłaszcza co w wielu przypadkach może być wadą; Rozwiązanie jest bardzo proste. funkcję ShedulerPeriodic() wpinamy w przerwanie zegara i uruchamiamy zegar. Akurat przykład był używany z tickiem systemowym 10ms. Jeśli dla kogoś jest to zbyt długi czas reakcji może dać czas np 1ms i skorygować stałe kroku dla poszczególnych czasów. Taski wywoływane cyklicznie dodajemy do odpowiednich definicji tasków w pliku scheduler.h w przykładzie mamy do dyspozycji - Task10Ms - Task20Ms - Task50Ms - Task100Ms - Task200Ms - Task500Ms - Task1s - Task2s - Task5s - Task10s - Task20s W niektóre makra były wpięte funkcje wywoływane okresowo co widać w kodzie pliku .h. Kod został tak skonstruowany, iż dopiero zdefiniowanie zadań dla danego czasookresu powoduje, iż zostaje wkompilowany odpowiedni kawałek kodu. Kod rozwiązania: `scheduler.h <./scheduler_h.html>`_ `scheduler.c <./scheduler_c.html>`_