Zakres laboratorium:
- zapoznanie się z systemem czasu rzeczywistego FreeRTOS,
- uruchomienie programu z dwoma zadaniami w systemie FreeRTOS,
- utworzenie nowych wątków z różnymi priorytetami, zapoznanie się z ustawieniem priorytetów
- synchronizacja pracy pomiędzy wątkami, wykorzystanie semaforów (wikipedia)
- zapoznać się z dokumentacją FreeRTOS (semafory binarne, semafory zliczające, funkcje)
Forma oceny-sprawozdanie:
- sprawozdanie z wykonanych zadań,
- działania każdego programu należy udokumentować przez wykonanie zrzutu ekranu i wklejenie go do sprawozdania z odpowiednim opisem,
- odpowiedzi na pytania do zadań należy umieścić w sprawozdaniu,
- sprawozdanie wysyłamy przez eportal w wyznaczonym terminie i prezentujemy prowadzącemu na zajęciach,
- na prezentacji sprawozdania należy mieć przygotowane wszystkie programu ze sprawozdania w w celu ich pokazania.
Zadanie 1
- ściągnąć i uruchomić system czasu rzeczywistego FreeRtos na systemie linux – (link),
- podmienić plik “main.c” na nowy plik – pliki podmieniamy w katalogu kompilacji dla systemu linux “/FreeRTOS/Demo/Posix_GCC”,
- uruchomić program i zapoznać się z działaniem przykładowych zadań,
- utworzyć dwa kolejne zadania tak aby 1 zadanie uruchamiało się, co 1 sekundę, drugie co 5sekund, trzecie co 10sekund i 4zadanie co 20sekund,
- zadania maja wypisywać na ekranie swój numer, kolejny numer wykonania i czas z funkcji “xTaskGetTickCount”.
Zadanie 2
- skasować w zadaniu pierwszym funkcje “vTaskDelayUntil” i “printf” – zostawić pustą pętle for,
- ustawić priorytety dla zadań:
- zadanie 1: priorytet 2
- zadanie 2: priorytet 3
- zadanie 3: priorytet 1
- zadanie 4 priorytet 2
- jakie zadania się wykonują, jakie są zablokowane dlaczego? Co to jest zagłodzenie wątku?
- dodać do zadania pierwszego funkcje “vTaskDelayUntil(1)” i funkcję “printf” taka jaka była na początku. Co się zmieniło, dlaczego?
Zadanie 3 – semafory
- rozpocząć pracę od programu z zadania 1, zmniejszyć czas opóźnienia zadania 4 do 5sekund,
- utworzyć 1 semafor binarny “xSemaphoreCreateBinary“, co to są semafory binarne, do czego mogą służyć?
- dodać do zadania 1 funkcję synchronizująca się na semaforze “xSemaphoreTake”, wyświetla napis tylko jak zezwoli semafor,
- dodać do zadania drugiego funkcję zerującą semafor “xSemaphoreGive”,
- jak będzie działał program, co ile czasu zostanie wyświetlony napis z wątku 1?
Zadanie 4 – semafory
- dodać drugi semafor binarny, który będzie blokował zadanie drugie w oczekiwaniu na sygnał od zadania 3,
- narysować diagram jak teraz zależą wątki od blokad zrobionych przez semafory,
- co ile czasu będzie wyświetlany napis z wątku 1?
Zadanie 5 – semafor zliczający
- rozpocząć pracę od programu z zadania 1, zmienić czas opóźnienia dla zadań 2-4 do 5 sekund,
- utworzyć semafor zliczający do 10 “xSemaphoreCreateCounting “,
- ustawić zadanie 1 aby oczekiwało na semafor zliczający,
- ustawić w zadaniach 2-4 funkcję ustawiającą semafor zliczający,
- jak będą wykonywać się zadania, w jakim momencie i ile razy wyświetli się napis z zadania 1?
- problem pakowania paczek-wiele osób pakuje zamówienia a jedna je wysyła – które zadania będą kim?