Systemy Czasu Rzeczywistego (SCR) System operacyjny czasu rzeczywistego w praktyce: - przykładowa platforma sprzętowo-programowa ZL9AVR+ Nut/OS Politechnika Gdańska Wydział Elektrotechniki i Automatyki Kierunek: Automatyka i Robotyka Studia stacjonarne I stopnia: rok II, semestr IV Opracowanie: dr inż. Tomasz Rutkowski Katedra Inżynierii Systemów Sterowania 1
Krótka charakterystyka wybranych Systemów Operacyjnych Czasu Rzeczywistego 2
Popularne systemy SOCR QNX Neutrino QNX, to zdaniem wielu (np. AMD, IBM, Cisco Systems) najlepszy i jednocześnie najbardziej zaawansowany oraz przyszłościowy, rygorystyczny (realizujący solidne wymagania czasowe) system operacyjny czasu rzeczywistego. Jest pierwszym w historii systemem wielozadaniowym i wielodostępnym przeznaczonym dla mikrokomputerów IBM PC. Wykorzystuje architekturę mikrojądra, które od wersji 6.0 systemu zajmuje 8kB (jądro systemu UNIX to co najmniej 700kB). QNX ma strukturę modułową oraz architekturę opartą o przesyłanie komunikatów (model klient serwer). Wysoko posunięta modularność i skalowalność systemu. Komunikacja pomiędzy procesami znajdującymi się na odległych węzłach sieci jest tak samo prosta, jak w obrębie jednego komputera. 3
Popularne systemy RTOS QNX Neutrino (cd.) QNX daje możliwość zdeterminowania czasu reakcji na zdarzenia występujące w systemie. QNX dzięki rozbudowanym możliwościom definiowania priorytetów, jest stosowany jako system służący do sterowania automatyką przemysłową, gdzie pewne zdarzenia są krytyczne (np. otwarcie zaworu bezpieczeństwa w zbiorniku kiedy gwałtownie wzrasta ciśnienie) i muszą być zawsze obsłużone na czas. Na bazie QNX opracowywane są również systemy SCADA. QNX jest również wykorzystywany jako platforma dla baz danych. 4
Popularne systemy RTOS VxWorks- Jeden z najbardziej profesjonalnych systemów czasu rzeczywistego firmy Wind River Systems. Należy do grupy nowoczesnych systemów operacyjnych opartych na koncepcji wielozadaniowości, komunikacji między zadaniami, mikrojądrze oraz procedurach obsługi przerwań. Posiada zaimplementowane funkcje komunikacji sieciowej. Możliwość rozwoju systemu docelowego zgodnie ze standardem ANSI C i C++ oraz POSIX. Bogaty zestaw dodatkowych pakietów oprogramowania: wykorzystanie wieloprocesorowości, biblioteki graficzne, narzędzia do testowania i uruchamiania aplikacji, wirtualne maszyny Javy, symulator środowiska docelowego. 5
Popularne systemy SOCR RTLinux Występuje w dwóch wersjach, komercyjnej RT Linux PRO i w ogólnodostępnej GPL RTLinux (darmowy i udostępniany wraz z całym kodem źródłowym). Jego cechą charakterystyczną jest to, że współistnieją w nim: jądro czasu rzeczywistego RTCore i jądro Linuksa. RTLinux szybko potrafi obsługiwać przerwania w warunkach dużego obciążenia obliczeniami, przy jednoczesnych znikomych operacjach dyskowych. Architektura RTLinux wymusza jednak pewien styl programowania (podział na dwie części: obliczeniową i operacje dyskowe, sieciowe). Typowa aplikacja składa się z zadań czasu rzeczywistego, które współpracują bezpośrednio ze sprzętem, a zadania Linuxa wykonują obliczenia nie wymagające reżimu czasu rzeczywistego. 6
Popularne systemy SOCR OS-9 To wielozadaniowy system operacyjny opracowany przez firmę Microware dla wbudowanych systemów sterujących opartych o procesory rodziny Motorola. System OS-9 ma strukturę warstwową, złożoną z jądra, niezależnej od sprzętu warstwy podprogramów zarządzającej zbiorami (plikami) oraz warstwy podprogramów sterujących pracą urządzeń zewnętrznych. Jedynym obowiązkowym elementem systemu jest jądro. Podstawowymi językami programowania aplikacji są C i asembler, dodatkowo są dostępne kompilatory Basic i Pascal. OS-9 nie można zakalikować do systemu rozproszonego ponieważ mechanizmy komunikacji i synchronizacji zadań są ograniczone do pojedynczego komputera. 7
Popularne systemy SOCR Windows CE Systemem czasu rzeczywistego Microsoftu o słabych wymaganiach czasowych. Posiada architekturę modułową. Zoptymalizowany dla urządzeń o niewielkiej ilości pamięci jądro systemu wymaga do uruchomienia około 1MB RAM. Microsoft opracował dedykowaną wersję systemu do układów elektronicznych urządzeń instalowanych w samochodach (np. zarządza sprzętem audio auta) Szerokie pole do popisu wszędzie tam, gdzie konieczne jest wykorzystanie wszelkich najnowszych technologii, a zwłaszcza tych związanych z multimediami. Można tworzyć bardzo wydajne konsole służące do gier oraz instalować w nich różne pakiety biurowe. 8
Popularne systemy SOCR Windows XP Embendded Windows XP Embedded, nie jest zasadniczo przeznaczony do przetwarzania w czasie rzeczywistym. Jego budowa jest jednak tak zorganizowana, że łatwo można go wzbogacić o takie możliwości. Służą do tego specjalne komponenty oraz rozwiązania firm trzecich. Windows XP Embedded składa się dokładnie z tych samych plików binarnych, co jego brat, przeznaczony na komputery typu desktop, tyle że niektóre zostały nieznacznie zmodyfikowane lub uproszczone. Posiada architekturę modułową. Znajduje zastosowanie u producentów bankomatów, terminale graficzne, urządzeń przenośnych, konsoli do gier oraz tych którzy wykorzystują najnowsze technologie multimedialne. 9
Popularne systemy SOCR µc/os-ii: ecos: przenośny skalowalny, z wywłaszczeniem, wielozadaniowe jądro ładowane z ROM, platforma docelowa to m.in. MS-Win, DOS, x86, 68HC11, ARM wysoce konfigurowalny, 32 lub 64 bitowy, oparty na koncepcji kodu źródłowego (nie jest to kolejny Linux), wysoce zoptymalizowany, zawiera bogatą bibliotekę matematyczną, komunikacyjną i system plików, platforma docelowa to m. in.: Windows, Sun, Linux, x86, ARM7 Przykłady darmowych SOCR dla rodziny AVR: AvrX, EtherNut- Nut/OS, TinyOS, XMK - extreme Minimal Kernel, FreeRTOS, 10
Systemy SOCR - obecnie Obecnie dostępnych jest ponad kilkadziesiąt systemów SOCR lub mających znamiona systemów operacyjnych czasu rzeczywistego. Część z nich to kompletne systemy operacyjne, w skład których wchodzą jądro, sterowniki I/O, systemy plików, usługi sieciowe... Niektóre dostępne są na licencji GPL a niektóre odpłatnie. Ceny wahają się od kilkuset do kilkuset tysięcy zł, przy czym cena zależy od dodatkowych modułów. 11
Systemy SOCR małe zestawienie QNX Neutrino 6.2 WinCE.NET VXWorks AE 1.1 RedHat Linux 1.1 Wydajność 9 7 5 2 Instalacja i konfiguracja 8 5 4 3 Architektura (RTOS) 9 7 7 3 Ilość API 7 7 8 5 Obsługa internetu 8 9 9 8 Narzędzia 8 8 8 8 Dokumentacja i wsparcie tech. 7 5 4 2 Średni wynik 8.0 6.9 6.4 4.4 Źródło: Dedicated Systems Experts, sierpień 2002 12
ZL9AVR+ Nut/OS Platforma sprzętowa 13
Platforma sprzętowa 14
Platforma sprzętowa -baza Platforma sprzętowa składa się z następujących modułów firmy Kamami: ZL9AVR płyta bazowa z dodatkowym wyposażeniem: 4 przyciski i przycisk zerowania 8 diod LED Złącze wyświetlacza alfanumerycznego LCD (2x16 znaków) 2 porty szeregowe RS232 (gniazda DB9F) Złącze konwertera USB2RS232 Złącze JTAG Przetwornik piezoelektryczny Złącza szpilkowe dla linii I/O mikrokontrolera Pamięć SRAM o pojemności 32kB 15
Platforma sprzętowa -baza Źródło: http://www.kamami.pl 16
ZL7AVR moduł dipavr z mikrokontrolerem ATmega-128: pamięć programu: 128 kb, pamięć danych EEPROM: 4 kb, pamięć danych SRAM: 4 kb, częstotliwość taktowania: 16 MHz, złącze do programowania Kanda ISP, wbudowany generator sygnału zerującego, Platforma sprzętowa -baza możliwość zastosowania zewnętrznego źródła napięcia referencyjnego dla przetwornika A/C, liczba linii I/O: 53. 17
Platforma sprzętowa -baza Źródło: http://www.kamami.pl 18
Platforma sprzętowa -baza ZL1ETH uniwersalny interfejs Ethernet: kontroler RTL8019AS, złącze RJ-45 (Ethernet 10Base-T), 3 diody LED (Link, Rx, Tx), nieulotna pamięć konfiguracji kontrolera (EEPROM), 8-bitowa magistrala danych. 19
Platforma sprzętowa -baza Źródło: http://www.kamami.pl 20
Wyświetlacz alfanumeryczny LCD (2x16 znaków) Moduł 16-przyciskowej klawiatury matrycowej 4 4 Platforma sprzętowa - elementy dodatkowe Moduł czytnika kart SD/MMC Moduł z graficznym wyświetlaczem LCD (od telefonu Nokia 3310) zegar RTC + 8kB pamięci EEPROM) Moduł z cyfrowym czujnikiem temperatury i termostatem z interfejsem I2C 21
Platforma sprzętowa - elementy dodatkowe Źródło: http://www.kamami.pl 22
ZL9AVR + Nut/OS Platforma programowa 23
Czym jest Nut/OS? Wielowątkowy system operacyjny czasu rzeczywistego (RTOS) Opracowany został przez niemiecką firmę Egnite Platforma programowa -Nut/OS Kod sytemu jest objęty liberalną licencją BSD (w aplikacjach komercyjnych należy jedynie zaznaczyć że wykorzystuje się system Ethernut) Kod sytemu jest napisany modularnie w języku C z nielicznymi wstawkami asemblerowymi Jest dostępny dla kilku platform sprzętowych Współpracuje obecnie z rodzinami mikrokontrolerów: Atmel AVR (Atmega103/Atmega-128), ARM (Atmel), Renesas H8/300H Składa się z bibliotek i odpowiedniego kodu startowego, dołączanych do programu użytkownika 24
Nut/OS udostępnia typowe mechanizmy wielozadaniowego OS: Wielowątkowość z podziałem czasu procesora, Zarządzanie pamięcią, dynamiczna alokacja RAMu Synchronizacja wątków (events) Obsługa systemów plików (UROM, FAT) Sterowniki podstawowych urządzeń (GPIO, SPI, I2C) Wysokopoziomowa obsługa przerwań Platforma programowa -Nut/OS Powyższe mechanizmy umożliwiają uruchomienie stosu TCP/IP (Nut/Net)!!! 25
Platforma programowa -Nut/OS Możliwości Nut/Net: obsługa protokołów TCP/IP: ARP, IP, TCP, UDP, ICMP, PPP (modem) obsługa popularnych kontrolerów Ethernet: RTL8019AS, CS8900, LAN91C111, DM9000, wbudowany serwer WWW o sporych możliwościach: skrypty CGI, dynamiczne generowanie zawartości stron autoryzacja użytkowników, konfiguracja interfejsu sieciowego z wykorzystaniem DHCP, interfejs programistyczny przypominający pecetowe sockety. 26
Podstawowe biblioteki Nut/OS: Platforma programowa -Nut/OS libnutarch.a funkcje specyficzne dla używanej platformy sprzętowej (np. przełączanie kontekstu mikrokontrolera) oraz sterowniki urządzeń przeznaczone wyłącznie dla konkretnej architektury (np. UART wbudowany w mikrokontroler, kontroler Ethernet RTL8019), libnutdev.a pozostałe sterowniki urządzeń, libnutfs.a funkcje obsługi systemów plików UROM i FAT, libnutcrt.a miniaturowa wersja standardowej biblioteki języka C, zawiera takie funkcje jak printf(), malloc(), fopen() itp. libnutos.a zarządzanie wątkami, obsługa komunikacji międzyprocesowej oraz funkcje dynamicznej alokacji pamięci, libnutnet.a stos TCP/IP, funkcje obsługi gniazd sieciowych 27
Kod startowy Nut/OS, nutinit.o: kod startowy systemu, uruchamiany po zerowaniu mikorkontrolera, Platforma programowa -Nut/OS jego główne zadania to: inicjalizacja układów peryferyjnych mikrokontrolera (m.in. zewnętrznej pamięci RAM), ustawienie stosu, uruchomienie zarządzania wątkami, po wykonaniu powyższych czynności, kod startowy skacze do funkcji main() programu użytkownika, 28
Platforma programowa -Nut/OS, WinAVRi AVR Studio Aby utworzyć w AVR Studio projekt wykorzystujący Nut/OS należy pamiętać by: Zainstalować na PC WinAVR i AVR Studio, Zainstalować na PC Nut/OS, przygotować biblioteki systemu na odpowiednią platformę sprzętową oraz umieścić je odpowiednio w strukturze katalogów WinAVR, Przygotować, odpowiednia edycja, plików sterujących kompilacją Makefile i Sources, Pliki Makefile i Sources umieścić w katalogu projektu AVR Studio, Projekt w AVR Studio kompilować z przygotowanym wcześniej plikiem Makefile (opcja Use external Makefile ). 29
Platforma programowa - Nut/OS, wątki W Nut/OS zaimplementowano: Priorytety wątków z zakresu od 0 do 254, przy czym 0 oznacza najwyższy a 254 najniższy priorytet: najwyższe priorytety (od 0 do 31) są zarezerwowane dal wątków systemu operacyjnego nowo utworzone wątki mają priorytet równy 64 Jądro systemu z wielowątkowością kooperatywną (bez wywłaszczania): jeśli pracujący w danej chwili wątek zwolni procesor, scheduler uruchomi wątek znajdujący się w stanie gotowości o najwyższym priorytecie, jeżeli żaden z wątków nie jest gotowy (oczekuje na zajście zdarzenia lub jest uśpiony) to system przełącza się na wątek jałowy idle o najniższym priorytecie Przełączanie wątków w tej metodzie jest możliwe jedynie gdy obecnie wykonujący się wątek dobrowolnie zwolni procesor 30
Platforma programowa - Nut/OS, wątki W Nut/OS każdy z wątków może znajdować się w jednym z następujących stanów: TDS_RUNNING : obecnie pracujący wątek, TDS_SLEEP : wątek oczekujący na wystąpienie zdarzenia, zakończenie operacji wejścia wyjścia lub uśpiony na pewien czas (np.: przez funkcję NutSleep()), po zakończeniu okresu oczekiwania/uśpienia wątek przechodzi w stan TDS_READY, TDS_READY : wątek gotowy do wznowienia pracy, 31
Platforma programowa - Nut/OS, wątki (podstawowe funkcje) HANDLE NutThreadCreate(char *name, void(*fn) (void*), void*arg, size_t stacksize); Tworzy nowy wątek o nazwie name. Wątek zaczyna swoją pracę od wywołania funkcji fn z parametrem arg. Przez arg można przekazać funkcji fn dowolny wskaźnik jako argument (lub podać NULL). Wartość stacksize określa rozmiar stosu dla tworzonego wątku. Domyślna wartość to 768 bajtów (makrodefinicja NUT_THREAD_MAINSTACK). Nowo utworzony wątek ma priorytet 64. 32
u_char NutThreadSetPriority(u_char level); Platforma programowa - Nut/OS, wątki (podstawowe funkcje) Ustawia priorytet obecnie pracującego wątku na wartość level. Funkcja zwraca wartość priorytetu wątku przed zmianą. 33
Platforma programowa - Nut/OS, wątki (podstawowe funkcje) void NutDelay(u_long ms); Czeka dokładnie określoną liczbę ms milisekund. Bieżący wątek nie jest przełączany. Funkcję można stosować do precyzyjnych opóźnień. 34
Za pomocą następujących funkcji można uśpić wątek w Nut/OS: NutSleep(), NutThreadYield(), NutEventWait(), NutTcpConnect(), NutTcpAccept(), NutTcpReceive(), NutTcpSend(), Platforma programowa - Nut/OS, wątki lub inna funkcja blokująca operacje wejścia wyjścia na gnieździe sieciowym. 35
Platforma programowa - Nut/OS, wątki (podstawowe funkcje) void NutSleep(u_long ms); Przerywa działający wątek na czas, co najmniej równy liczbie ms milisekund i przełącza go zgodnie z algorytmem schedulera. Rzeczywisty czas, na jaki wątek zostanie uśpiony zależy od rozdzielczości timera systemowego (domyślnie 62,5 milisekundy). Funkcji NutSleep nie wolno używać do odmierzania precyzyjnych opóźnień!!! 36
Platforma programowa - Nut/OS, wątki (podstawowe funkcje) void NutThreadYield(void); Wywołanie tej funkcji powoduje natychmiastowe przełączenie bieżącego wątku zgodnie z algorytmem schedulera. 37
Platforma programowa - Nut/OS, zarządzanie pamięcią Nut/OS udostępnia standardowe funkcje języka C umożliwiające dynamiczną alokację pamięci: malloc free Do dyspozycji jest 32 kb pamięci RAM 38
Platforma programowa - Nut/OS, zarządzanie pamięcią (podstawowe funkcje) void*malloc(size_t), free(void*); Funkcje alokujące i zwalniające pamięć zgodne ze standardową biblioteką języka C. void*nutheapalloc(size_t), NutHeapFree(void*); Ethernutowe odpowiedniki funkcji malloc() i free(). size_t NutHeapAvailable(); Zwraca ilość dostępnej pamięci sterty w bajtach. 39
Przykłady: 1) interfejs UART0 2) podstawy wątków 3) prosty serwer WWW 40
Przykład 1: interfejs UART0 41
Przykład 1 42
Przykład 1 43
Przykład 1 44
Przykład 1 int NutRegisterDevice(NUTDEVICE * dev, uptr_t base, u_char irq); Funkcja ta odpowiada za rejestrację i inicjalizację urządzeń w systemie Nut/OS. Parametr dev jest wskaźnikiem do struktury opisującej sterownik urządzenia. Dla sterowników wbudowanych w Nut/OS struktury te są już zadeklarowane w plikach nagłówkowych, np. DEV_DEBUG odpowiada zerowemu UART owi w mikrokontrolerze ATmega128. Przez parametry base i irq możemy przekazać adres bazowy rejestrów urządzenia i numer przerwania. Jeżeli rejestracja urządzenia przebiegnie prawidłowo, funkcja zwróci wartość 0, jeśli nie, wartość 1. 45
Przykład 1 FILE *freopen(const char *name, CONST char *mode, FILE * stream); Funkcja ta odpowiada za przekierowanie standardowego wyjścia (stdout) do portu szeregowego. Funkcja otwiera plik o nazwie name w trybie mode i ustalonym deskryptorze stream. W kodzie z poprzedniego slajdu: plik o nazwie DEV_DEBUG_NAME (uart0) w trybie do zapisu (w) i deskryptorze stdout (standardowe wyjście). 46
Przykład 1 int_ioctl(int fd, int cmd, void*buffer); Funkcja jest wykorzystywana do wykonywania niestandardowych operacji na urządzeniach wejścia wyjścia. Funkcja _ioctl odpowiada za ustawienie prędkości przesyłania danych przez port szeregowy. Parametr fd to numer deskryptora pliku urządzenia, cmd to kod polecenia a buffer to dane dla polecenia. Poprawne wykonanie funkcji jest sygnalizowane zwróceniem wartości 0, niepoprawne, wartości ujemnej. 47
Przykład 2: podstawy wątków 48
Przykład 2 49
Przykład 2 50
Przykład 2 51
Przykład 2 52
Przykład 3: prosty serwer WWW 53
Przykład 3 54
Przykład 3 55
Przykład 3 56
Przykład 3 57
Przykład 3 58
Przykład 3 59
Bibliografia: [1] P.Szymczyk(2003). Systemy Operacyjne Czasu Rzeczywistego. Uczelniane Wydawnictwa Naukowo-Dydaktyczne, Kraków. [2] J.Ułasiewicz(2007). System czasu Rzeczywistego QNX6 Neutrino. Wydawnictwo BTC, Legionowo. [3] K.Lal, T.Rak, K.Orkisz(2003). RTLinux system czasu rzeczywistego. Helion, Gliwice. [4] http://www.kamami.pl [5] http://www.ethernut.de/en [6] Elektronika Praktyczna 2006-2007 60
Dziękuję za uwagę!!! 61