Łukasz Deńca – IV rok Koło Naukowe Techniki Cyfrowej dr inż
Transkrypt
Łukasz Deńca – IV rok Koło Naukowe Techniki Cyfrowej dr inż
Łukasz Deńca – IV rok Koło Naukowe Techniki Cyfrowej dr inż. Wojciech Mysiński – opiekun naukowy REAL-TIME SYSTEM ON ARM7 TYPE MICROCONTROLLER The article presents usinng Real-time system on ARM7 type microcontroller. The article presents some advatage of usinng the Real-time system on microcontroller and describe implementation of FreeRTOS on ARM7 microcontroller. SYSTEM CZASU RZECZYWISTEGO NA MIKROKONTROLERZE TYPU ARM7 Artykuł prezentuje zastosowanie systemu czasu rzeczywistego na mikrokontrolerze typu ARM7. Przedstawione są również korzyści wynikające z zastosowania systemu czasu rzeczywistego na mikro kontrolerach oraz sposób implementacji takiego systemu na przykładzie FreeRTOS. Keywords: FreeRTOS, Real-time system, ARM7, LPC2138, microcontroller Słowa kluczowe: FreeRTOS, system czasu rzeczywistego, ARM7, LPC2138, mikrokontroler 1. Wprowadzenie Współcześnie praktycznie każdy ma styczność z systemami operacyjnymi, spotykamy je praktycznie na każdym komputerze klasy PC zarówno w pracy jak i w zaciszu domowym, także telefony komórkowe są w nie wyposażone. System operacyjny ma za zadanie tak zarządzać zasobami sprzętowymi oraz mocą obliczeniową aby zadania mu powierzona zostały zrealizowane w optymalny sposób. Podsumowując możemy przedstawić jedną z wielu definicji systemu operacyjnego: „System operacyjny (ang. Operating System)- oprogramowanie zarządzające sprzętem komputerowym, tworzące środowisko do uruchamiania i kontroli zadań użytkownika.” Na rysunku 1 przedstawiony jest schemat warstw logicznych obrazujący relacje pomiędzy elementami systemu komputerowego. Rys.1.Warstwy logiczne pomiędzy elementami systemu komputerowego Do najważniejszych zadań systemu operacyjnego należą: planowaniem oraz przydziałem czasu procesora poszczególnym zadaniom, kontrolą i przydziałem pamięci operacyjnej dla uruchomionych zadań, dostarcza mechanizmy do synchronizacji zadań i komunikacji pomiędzy zadaniami, obsługuje sprzęt oraz zapewnienia równolegle wykonywanym zadaniom jednolity, wolny od interferencji dostęp do sprzętu. Dodatkowe przykładowe zadania, którymi może ale nie musi zajmować się system operacyjny to: ustalanie połączeń sieciowych zarządzanie plikami. Najszerszym ale najbardziej podstawowym kryterium podziału systemów operacyjnych jest podział na: system operacyjny czasu rzeczywistego (RTOS) systemy operacyjne czasowo niedeterministyczne Podział ten odnosi się do najbardziej podstawowej funkcjonalności systemu operacyjnego jakim jest planowanie i przydział czasu procesora poszczególnym zadaniom. Ze względu na sposób realizacji przełączania zadań systemy operacyjne można podzielić na: systemy z wywłaszczaniem zadań systemy bez wywłaszczania. Inny rodzaj podziału to podział na: otwarte systemy operacyjne wbudowane systemy operacyjne. Systemy otwarte można uruchomić na dowolnej maszynie wskazanego rodzaju np. PC i w określonym stopniu modyfikować. Systemy wbudowane jak sama nazwa wskazuje są zaszyte (wbudowane) wewnątrz urządzeń użytkowych, maszyn pojazdów itp. Aby uzyskać wysoką niezawodność pracy minimalizuje się w takich przypadkach możliwość dokonywania zmian w konfiguracji systemu operacyjnego. 2. System czasu rzeczywistego System Czasu Rzeczywistego to urządzenie techniczne, którego działanie jest ściśle determinowane czasowo przez zdarzenia zewnętrzne środowiska, w którym pracuje. Najistotniejszą cechą systemów czasu rzeczywistego jest możliwość zapewnienia oczekiwanej reakcji systemu komputerowego na zaistniałe zdarzenie w świecie rzeczywistym w deterministycznym czasie. Rozróżnia się dwa typy wymagań stawianych systemom czasu rzeczywistego: twardy i miękki. Systemy czasu rzeczywistego są szeroko wykorzystywane w przemyśle jak również w elektronicznych systemach cywilnych i militarnych. Spotykane są jako: przemysłowe systemy komputerowe sterujące urządzeniami przemysłowymi, monitorującymi pracę linii produkcyjnych i sterującymi robotami w przemyśle. Mają zastosowanie w urządzeniach medycznych od prostych termometrów do pomiaru temperatury pacjenta po urządzenia do tomografii komputerowej oraz wspomagające funkcje życiowe podczas operacji medycznych. Systemy czasu rzeczywistego sterują aktywnymi systemami bezpieczeństwa w pojazdach jak również są obecne w wielu urządzeniach codziennego użytku. Wreszcie są nieodłącznym elementem współczesnych systemów wojskowych. Przedstawicielami systemów czasu rzeczywistego są: VxWorks ® QNX ® FreeRTOS uCRTOS uC/OS-II eCOS OS9 ® LynxOS ® Phoenix-RTOS ® iRMX RT-Linux Zastosowanie systemu czasu rzeczywistego w układach z mikrokontrolerami pozwala programiście skupić się na newralgicznych punktach projektu. Programista może w ten sposób podejść do projektu gdyż system operacyjny czasu rzeczywistego zajmuje się komunikacją ze sprzętem, podziałem czasu procesora i oczywiście czuwa nad wykonywaniem poszczególnych zadań. 3. FreeRTOS FreeRTOS (licencja zmodyfikowana GPL) jest najbardziej rozwiniętym i najlepiej opisanym systemem pracującym na małych platformach, nawet 8-bitowych. Powstało wiele aplikacji na różne platformy i rozwiązania sprzętowe, które można pobrać ze strony projektu (często z dokładnym opisem konfiguracji sprzętowej). Warto tutaj wspomnieć, że system jest rozpowszechniany licencja zmodyfikowana GPL co z komercyjnego punktu widzenia daje nam możliwość zarabiania na aplikacjach pisanych z wykorzystaniem API FreeRTOSa natomiast zmiany w samym systemie musimy publikować. Też jeśli będzie tego wymagał projekt można zastosować komercyjne odmiany FreeRTOSa „OpenRTOS i SafeRTOS „ mamy wtedy dostęp do pełnego wsparcia i certyfikatów bezpieczeństwa. Można polecić przykładową aplikację FreeRTOS stworzoną dla mikroprocesora ATMega32. 2kB pamięci RAM dostępnej w tym mikroprocesorze pozwala na uruchomienie 10 zadań, co raczej nie pozwoli na stworzenie wartościowego produktu, ale umożliwi szybkie zapoznanie się z możliwościami systemu. Obsługiwane architektury to: ARM7, ARM9, AVR32, AVR Atmega, MSP430, PIC18, PIC24, PIC32, Freescale M68k, Renesas H8, Intel i960, Intel i386, MIPS, NEC V850E, PowerPC 4. Zasada działania systemu czasy rzeczywistego FreeRTOS jest systemem operacyjnym z wywłaszczeniem co możemy w prosty sposób zilustrować na rysunku 2. Rys.2. Działanie systemu czasu rzeczywistego z wywłaszczaniem Rys.3. Rys.2. Działanie systemu czasu rzeczywistego bez wywłaszczania Z wywłaszczeniami mamy do czynienia gdy obsługiwane zadanie jest przerywane podczas pracy na rzecz innego zadania o wyższym priorytecie, nie tolerującego zwłoki w obsłudze. Natomiast gdy mikrokontroler nie ma żadnych zadań do obsługi, przechodzi do procesu bezczynności „Idle task” z punktu widzenia użytkownika jest to ważny proces gdyż zwykle z nim są zaimplementowane procedury oszczędzania energii oraz zajmuje się czyszczeniem pamięci po zakończonych procesach. Procesy w systemie mogą być realizowane za pomocą zadań (task) lub współprogramów ( coroutines) Każde zadanie posiada swój własny kontekst, czy z punktu widzenia zadania ma nieograniczony dostęp do rejestrów i stosu. O kolejności wykonywania zadań decydują algorytmy szeregowania. Planista kontroluje uruchamiane zadania a system operacyjny dba o przełączanie kontekstów każdy proces ma własny stos którego zawartość jest umieszczona w pamięci RAM Współprogramy działają podobnie do zadań z tą różnicą że mają wspólny stos dzięki temu zajmują mniej zasobów systemowych ale nie mogą wykorzystywać do komunikacji między sobą i zadaniami semaforów i kolejek. Każde z poszczególnych zadań może się znajdować w jednym z poszczególnych stanów: Wykonywane Gotowe do wykonania Zablokowane Wstrzymane Powyższe stany można schematycznie przedstawić na diagramie Rys.4. Poszczególne fragmenty zadania Jądro systemu składa się z 3 plików oraz pliku konfiguracyjnego w którym dostosowujemy możliwości systemu do naszych potrzeb, powyższe pliki to: tasks.c queue.c list.c Plik konfiguracyjny jądra: FreeRTOSConfig.h Do jądra oczywiście dołączane są pliki wiążące jądro ze sprzętem i dla każdej architektury są one inne. Jednak programista podczas pisania programów wykorzystuje API systemu i w pewnym zakresie jest niezależny od sprzętu. Taka konstrukcja systemu zapewnia możliwość prostego przenoszenia programów pomiędzy różne architektury sprzętowe. Poniższy kod przedstawia sposób programowania z wykorzystaniem API systemu: „void vTaskLED(void * pvParameters) { For(;;) { //opóźnienie 500ms vTaskDelayUntil( &xLastFlashTime, %00/portTICK_RATE_MS); //zmina stanu portu na przeciwny vhToggleLED(); } }” Już na tym etapie programowania widzimy jakie zalety ma wykorzystanie systemu operacyjnego. W tym fragmencie programu programista nie odwołuje się bezpośrednio do sprzętu, system robi to za niego. Dzięki temu programista może się bezpośrednio skupić na problemie jaki ma do wykonania oraz dodatkowo ma zapewnioną możliwość przeniesienia aplikacji na inną konfigurację sprzętową. 5. Bibliografia http://www.freertos.org http://www.nxp.com http://www.wikipedia.org/ „LPC2000 Mikrokontrolery z rdzeniem ARM7” – Lucjan Bryndza „Mikrokontrolery LPC2000 w przykładach” – Emil Stawski „Elektronika Praktyczna” 05.2009 str. 116 http://www.ee.ic.ac.uk/t.clarke/rtos/lectures/RTOSlec.pdf http://www.open-research.org.uk/ARMuC/LPC21xx.html http://www.par.pl/2009/files/04-09_artykul3p.pdf