MQX-RTOS – bezpłatny OS dla mikrokontrolerów firmy Freescale
Charakterystyka systemu czasu rzeczywistego MQX
System operacyjny jest oprogramowaniem zarządzającym dostępem do zasobów sprzętowych systemu. Spełnia on także zazwyczaj rolę interfejsu pośredniczącego pomiędzy sprzętem a aplikacjami, m.in. poprzez wykorzystanie bibliotek zapewniających obsługę peryferiów wewnętrznych i zewnętrznych.
W przypadku systemu czasu rzeczywistego, kernel jest odpowiedzialny także za kontrolę podziału czasu wykonywania poszczególnych zadań przez jednostkę centralną. Umożliwia on przełączanie zadań (tasks) z uwzględnieniem ich priorytetów, synchronizuje dostęp zadań do zasobów sprzętowych systemu, umożliwia także komunikowanie się zadań między sobą. Zapewnia odpowiednia obsługę zdarzeń zewnętrznych i wewnętrznych – przerwań.
Rys. 2. MQX RTOS – kompletny system programistyczny zintegrowany ze środowiskiem programistycznym CodeWarrior
Warstwa programowa (rys. 2) odpowiadająca ze obsługę peryferiów składa się z zestawu sterowników. Sterownik jest to program, który konfiguruje urządzenie peryferyjne oraz udostępnia zestaw funkcji (lokalne API) niezbędnych do wykorzystania możliwości przypisanego urządzenia w aplikacji. Wyodrębnienie sterowników jako niezależnego elementu systemu operacyjnego jest spowodowane specyfiką ich wykorzystania: każde zadanie (aplikacja) może wykorzystywać dane urządzenie peryferyjne do własnych celów. Korzystając z uniwersalnych sterowników unikamy wielokrotnego konfigurowania tych urządzeń, a także konfliktów związanych z dostępem do urządzeń oraz obsługą zgłaszanych przez nie błędów. System MQX umożliwia tworzenie własnych sterowników przez programistów.
Najpopularniejsze peryferia, dla których sterowniki zawarto w MQX to: interfejsy UART, SPI, I2C, FlexBus, moduł RNG, pamięć Flash oraz linie GPIO. Przykładowe funkcje udostępniane przez sterowniki urządzeń peryferyjnych to:
• fopen (device driver),
• read (specific driver parameters),
• write (specific drivers parameters),
• ioctl (supported command),
• fclose (file handler).
Zestawy sterowników wchodzą w skład zestawów plików BSP (Board Support Package), których zadaniem jest: inicjalizacja mikrokontrolera oraz innych elementów warstwy sprzętowej, zdefiniowanie specyficznych parametrów systemu (jak np. częstotliwość zegara systemowego), ustawienie wektorów przerwań, parametrów wykorzystywanych sterowników, skonfigurowanie funkcji wejść/wyjść, umożliwienie startu funkcji main() i samego systemu operacyjnego.
Przykładem specyficznego sterownika stosowanego w systemie MQX jest obsługa systemu plików MFS (MSDOS File System), który obsługuje standartowe systemy plików FAT12, FAT16 oraz FAT32. Sterownik MFS zawiera zestaw sterowników niższego poziomu, przeznaczonych do obsługi różnych mediów, np.: dysku Flash, stacji dyskietek, pamięci Flash USB, kart SD itd.
We współczesnych aplikacjach dużą rolę odgrywa interfejs USB, którego sterownik jest także standardowym elementem systemu MQX. Obsługuje on interfejs USB w trybie host (z obsługą urządzeń klasy HID (myszy, klawiatury), MSD (dyski Flash), HUB oraz CDC (komunikacja szeregowa). Obsługiwany jest także tryb USB device, w ramach którego obsługiwane są urządzenia należące do klas: HID, CDC, PHDC (Personal Health Core Device Class) oraz MSD.
Standardowym elementem systemu MQX jest stos TCP/IP czasu rzeczywistego o nazwie RTCS. Zastosowano w nim standardowy mechanizm interfejsu opartego na gniazdach (sockets), zapewnia on obsługę wielu protokołów:
• Telnet serwer i klient,
• FTP serwer i klient,
• TFTP serwer i klient,
• agent SNMP,
• serwer Echo,
• serwer EDS (Winsock),
• klient SNTP,
• DNS Resolver,
• serwer i klient DHCP.
Stos RTCS jest skalowalny zarówno podczas kompilacji aplikacji jak i w czasie działania. Programista może wybrać implementację tylko tych protokołów, które są w aplikacji wykorzystywane. Implementacja stosu RTCS jest wspomagana przez środowisko programistyczne CodeWarrior, dzięki czemu podczas uruchamiania i śledzenia wykonywania programu można monitorować stan obciążenia CPU i pamięci mikrokontrolera przez protokół sieciowy.
Konfiguracja stosu RTCS jest niezależna od wybranego do mikrokontrolera, co umożliwia m.in. łatwą integrację bibliotek udostępnianych przez partnerów zewnętrznych. Modułowa budowa stosu umożliwia ich łatwą i wygodną inicjalizację i stosowanie.