REKLAMA

Programista 11/2015 (42) – Piszemy własny RTOS!

Zadajecie sobie czasami pytanie „jak to działa?”, np. system operacyjny czasu rzeczywistego ...? Okazuje się, że po rozłożeniu go na części pierwsze to żadna magia. Czemu więc nie spróbować zbudować własnego?

W Internecie możemy znaleźć dziesiątki systemów dla małych mikrokontrolerów, również takie z otwartym kodem źródłowym. Najczęściej jednak systemy te były projektowane w celu spełnienia konkretnych założeń projektowych, przez co ich kod nie jest najlepszym przykładem dydaktycznym. W latach 90. Popularnym systemem napisanym typowo w celach edukacyjnych był MicroC/OS stworzony przez Jean J. Labrosse1. Od tamtego czasu sporo jednak w świecie embedded się zmieniło, a przede wszystkim mikroprocesory stały się szybsze i tańsze. Tym samym od systemów RTOS wymaga się więcej, niż od nadmienionego pierwowzoru. W 2009 r. powstał MicroC/OS III jako komercyjny produkt firmy Micrium. W tym artykule prezentuję budowę autorskiego systemu RTOS wzorowanego na tej samej koncepcji monolitycznego kernela, który posiada szereg usprawnień w stosunku do pierwowzoru, w tym obsługę dziedziczenia priorytetów czy nielimitowaną liczbę zadań, a przede wszystkim którego kod jest dostępny na licencji otwartej. Projekt ten nie aspiruje do bycia najlepszą czy najszybszą implementacją systemu RTOS. W zamyśle jest on projektem edukacyjnym z dużym naciskiem na prostotę implementacji (...)

Zagadnienia poruszane w tym artykule:

  • Czym jest RTOS?
  • Czym jest zadanie?
  • Czym jest „przełączenie kontekstu”?
  • Do czego służy scheduler?
  • Sekcje krytyczne systemu
  • Blokowanie i wznawianie zadań
  • Wywłaszczanie zadań
  • Zegar systemowy oraz timery

Artykuł pochodzi z magazynu "Programista" nr 42 (11/2015). Spis treści tego wydania: http://programistamag.pl/programista-11-2015-42/

Autorem artykułu jest Radosław Biernacki, od ponad dziesięciu lat zajmuje się komercyjnym programowaniem systemów embedded. Obecnie pracuje w firmie Semihalf na stanowisku starszego programisty.

>>POBIERZ FRAGMENT TEGO ARTYKUŁU<<

rtos2