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, wywołałem się x razy”, gdzie x to licznik wewnątrz wątku, zwiększany za każdym razem gdy wątek uzyska 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

Semafor binarny

  1. utworzyć program z 3 wątkami (1 producent i 2 konsumentów)
  2. producent produkuje 10 nowych wiadomość (ustawia semafor binarny 10 razy) i przechodzi do pustej pętli
  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?

Semafor zliczający

  1. utworzyć program z 3 wątkami (1 producent i 2 konsumentów)
  2. producent produkuje 10 nowych wiadomość (ustawia semafor zliczający 10 razy) i przechodzi do pustej pętli
  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?
  5. jak działa semafor zliczający w porównaniu do semafora binarnego?

 

3. Bezpieczne dzielnie wspólnych zasobów – “sekcja krytyczna”

Zadanie 4

  1. utworzyć program z zabezpieczeniem przed jednoczesnym dostęp do zasobu wspólnego jakim jest interfejs komunikacyjny UART
  2. do zabezpieczenia wykorzystać mechanizm semaforów
  3. jakie mogą być problemy z takim mechanizmem, na co należy zwracać uwagę?
4. Sekcja krytyczna FreeRTOS

co to jest sekcja krytyczna? jak ona działa? Jakie działają funkcje “taskENTER_CRITICAL” i “taskEXIT_CRITICAL”.

czym rożni się ten mechanizm od mechanizmu z zadania 4?  Jaksie są wady, zalety dwóch rozwiązań?

5. 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ęć, jednocześnie miga diodą LED co 1s
  4. licznik liczy ilość naciśnięć od początku pracy programu
  5. czy program działa prawidłowo?