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?