Architektura komputerów i systemy operacyjne
Autor:
Marek Sawicki
Ostatnia aktualizacja:
17.05.2016r.
Wersja:
1.0
Instrukcja laboratoryjna
Spotkanie 5
System operacyjny FreeRTOS
Architektura komputerów i systemy operacyjne
Wersja 1.0
Strona 2
Spis treści
Utworzenie projektu, uruchomienie dwóch niezależnych zadań – 2pkt.
Architektura komputerów i systemy operacyjne
Wersja 1.0
Strona 3
Wprowadzenie
1.
Systemy operacyjne w technologii tworzenia oprogramowania służą do umożliwienia
równoległej pracy wielu niezależnym od siebie programom. Dodatkowo uniezależniają
w pewnym stopniu warstwę oprogramowania od sprzętu. Podstawową funkcja systemu
operacyjnego jest przydzielanie zasobów (najczęściej czasu mikrokontrolera) dla
poszczególnych uruchomionych zadań (aplikacji). Jeżeli architektura sprzętowa zawiera jeden
rdzeń procesora to naturalnie możliwe jest w danej chwili wykonywanie tylko jednego
z programów (zadań). System operacyjny szybko przydziela czas dla poszczególnych zadań
wstrzymując jednocześnie pracą pozostałych. Przełączanie to odbywa się z reguły
kilkadziesiąt lub kilkaset razy na sekundę, co sprawia wrażenie, że programy wykonują się
jednocześnie.
W każdym systemie operacyjnym ograniczeniem liczby jednocześnie uruchomionych
zadań jest dostępność zasobów sprzętowych. Głównie dotyczy to ilości dostępnej pamięci
operacyjnej (RAM). Nie oznacza to jednak, że uruchomione zadania będą się zawsze
wykonywały w przewidzianych przez programistę rygorach czasowych. System operacyjny
FreeRTOS, jest systemem umożliwiającym realizację zadań w czasie rzeczywistym. Zawiera
mechanizmy pozwalające na priorytetowanie zadań oraz pomija w kolejce zadania które
aktualnie nie mają nic do zrobienia (np. czekają na zdarzenie). System ten nie zawiera
żadnych mechanizmów ochrony pamięci ani zasobów i pozwala pracować programom
bezpośrednio na zasobach sprzętowych. Nie wirtualizuje dostępu do zasobów przez co jego
zastosowanie powoduje spadek wydajności przetwarzania jedynie w minimalnym stopniu.
Sam system operacyjny zawiera się w 3 plikach i jest otwarto źródłowy. Wymaga
dostarczenia funkcji (sterowników) alokacji pamięci oraz obsługi przerwań przełączających
zadania. Wymagane funkcje są napisane w języku C/asm na większość obecnych na rynku
architektur i rodzin mikrokontrolerów. W źródłach dostępnych na stronie freertos.org można
znaleźć sterowniki dla procesorów rodziny: AVR, PIC, SAM7, LPC4000, STM32 i innych.
Dostępne są również implementacje na procesory w układach programowalnych Cyclone oraz
Zynq. Sposób organizacji kodu i dostęp do źródeł pozwala samodzielnie napisać potrzebne
funkcje na praktycznie każdą inną architekturę.
1.1. Cel ćwiczenia
Celem laboratorium jest zapoznanie się z systemem czasu rzeczywistego FreeRTOS oraz
metodologią projektowania oprogramowania wielowątkowego.
1.2. Wymagania:
Umiejętność pisania programów w języku C.
Znajomość metod formatowania tekstu (sprintf).
Znajomość elementów systemu operacyjnego: zadanie, kolejka, semafor
Metody sterowania zadaniami w systemie freeRTOS (freertos.org)
Architektura komputerów i systemy operacyjne
Wersja 1.0
Strona 4
Zadania do wykonania
2.
Do wykonania zadań należy utworzyć nowy projekt na mikrokontroler zamontowany
w zestawie uruchomieniowym oraz dołączyć do niego skompilowaną i przygotowaną przez
prowadzącego bibliotekę evbLib.lib. Biblioteka ta zawiera w sobie plik startup, dlatego nie
należy samodzielnie dołączać go do drzewa projektu. Ponadto należy dołączyć pliki systemu
FreeRTOS: tasks.c, queue.c, list.c. Dodatkowo z katalogu CM3 dołączyć plik port.c a z katalogu
MemMag – heap3.c. Utworzyć plik z pusta funkcją main. Skomplikować projekt. Jeżeli
kompilator nie może dołączyć plików nagłówkowych należy dodać odpowiednie ścieżki
(zakładka C/C++ w opcjach projektu).
2.1. Utworzenie projektu, uruchomienie dwóch niezależnych zadań – 2pkt.
1) W funkcji main napisać kod programu powodujący migotanie diody D1. Projekt
skompilować i uruchomić na zestawie ZL27ARM.
2) Skopiować funkcję main dwukrotnie, zmieniając jej nazwę na task1 oraz task2.
Zmienić w nich kod tak aby sterowały diodami D1 oraz D2. Nowe funkcje powinny
przyjmować jako parametr wskaźnik nieokreślonego typu (void *).
void task1(void *param);
3) W funkcji main wywołać funkcje tworzącą zadania w systemie RTOS a następnie
funkcję uruchamiającą jądro system (planistę).
xTaskCreate(task1,"Zadanie 1",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY,NULL);
vTaskStartScheduler();
4) Skompilować projekt i uruchomić na zestawie ZL27ARM. Porównać działanie
programu gdy uruchomione jest jedno zadanie oraz dwa. Zmienić priorytet jednego z
zadań. Dlaczego nie wszystkie zadania wykonują się w czasie rzeczywistym?
2.2. Przekazywanie parametru do zadań – 2pkt.
1) Utworzyć osiem zadań, po jednym dla każdej diody LED przy pomocy pętli. Do funkcji
xTaskCreate każdego z zadań jako wskaźnik na funkcję przekazać task1.
2) Zmodyfikować kod zadania task1 tak aby sterował diodą której numer otrzymał
w parametrze.
2.3. Synchronizacja zadań – 3pkt.
1) Napisać i uruchomić zadanie powodujące pojawianie się i znikanie imienia jednej
z osób w zespole w górnej linii LCD.
2) Napisać i oddzielnie uruchomić zadanie powodujące pojawianie się i znikanie imienia
drugiej z osób w zespole w dolnej linii LCD.
3) Uruchomić obydwa zadania jednocześnie. Przy pomocy zmiennej globalne (1 pkt) lub
semafora (3pkt) zabezpieczyć rywalizację o dostęp do wyświetlacza LCD.