Zakres laboratorium:
  • synchronizacja pracy zadań
  • sekcja krytyczna
  • semafory, mutexy
  • praca z przerwaniami i FreeRTOS

 

1. Semafor binarny, mutexy

opis semaforów: link

opis mutexów: link

Jakie są różnice między mutexem a semaforem?

Zadanie 1

  1. utworzyć 3 wątki o tych samych priorytetach
  2. wątek numer 1 jest producentem i ustawia semafor/mutex – ustawia semafor co 1 sekundę, przy każdej nowym ustawieniu wyświetla się komunikat na terminalu: “Wątek 1: ustawiony semafor/mutex”
  3. wątki 2 i 3 są konsumentami i jeśli jest ustawiony semafor to pobierają go i wysyłają na terminal wiadomość: “Wątek n: mam semafor”
  4. wątki 2 i 3 oczekują na ustawianie semafora przez odpowiednią funkcję, czekając nic nie robią
  5. jak działa taki program?

Zadanie 2

  1. dodać do programu 4 wątek, który również wysyła informacje jak jest semafor, ale jednocześnie miga dioda LED z częstotliwością 1Hz
  2. na podstawie programu sprawdzić różnice między semaforami i mutexami
  3. ustawić różne priorytety dla wątków, jak to działa teraz?
2. Semafor zliczający

opis: link

co to jest? jak działa? jaka jest różnica między zwykłym semaforem?

Zadanie 3

  1. utworzyć program z 3 wątkami (1 producent i 2 konsumentów)
  2. producent produkuje nową wiadomość (ustawia semafor zliczający) z częstotliwością 2Hz i wyświetla odpowiedni komunikat
  3. konsumenci oczekują na wiadomość i po jej odebraniu wyświetlają napis na terminalu, a następnie idą spać na 2 sekundy
  4. jak działa taki program? jak działa jak zmienimy czas dla konsumentów/ producenta?
  5. jak działa semafor zliczający w porównaniu do semafora binarnego?

 

3. Sekcja krytyczna

co to jest sekcja krytyczna? jak ona działa?

Zadanie 4

  1. utworzyć program z sekcją krytyczną blokująca dostęp do jakiś zasobów wspólnych
  2. wymyślić problem i odpowiednio go zabezpieczyć za pomocą sekcji krytycznej
  3. jakie mogą być problemy z sekcją krytyczną?
  4. opisać i zaprezentować działania bez sekcji i z sekcją

 

4. Wywołanie funkcji FreeRtos z przerwania

Zadanie 5

  1. utworzyć przerwanie zewnętrzne reagujące na przycisk
  2. w przerwaniu ustawiać semafor – “buttonISR”
  3. utworzyć wątek, który na każde przyciśnięcie przycisku – ustawienie semafora, wyśle na termin informacje o przyciśnięciu przycisku z licznikiem naciśnięć
  4. licznik liczy ilość naciśnięć od początku pracy programu
  5. czy program działa prawidłowo?

 

Zadanie 6

  1. zmienić semafor z poprzedniego zadania na semafor zliczający
  2. jak teraz działa program, jakie są wady/zalety?