Ł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