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
- utworzyć 3 wątki o tych samych priorytetach
- 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”
- 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”
- wątki 2 i 3 oczekują na ustawianie semafora przez odpowiednią funkcję, czekając nic nie robią
- jak działa taki program?
Zadanie 2
- 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
- na podstawie programu sprawdzić różnice między semaforami i mutexami
- 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
- utworzyć program z 3 wątkami (1 producent i 2 konsumentów)
- producent produkuje nową wiadomość (ustawia semafor zliczający) z częstotliwością 2Hz i wyświetla odpowiedni komunikat
- konsumenci oczekują na wiadomość i po jej odebraniu wyświetlają napis na terminalu, a następnie idą spać na 2 sekundy
- jak działa taki program? jak działa jak zmienimy czas dla konsumentów/ producenta?
- 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
- utworzyć program z sekcją krytyczną blokująca dostęp do jakiś zasobów wspólnych
- wymyślić problem i odpowiednio go zabezpieczyć za pomocą sekcji krytycznej
- jakie mogą być problemy z sekcją krytyczną?
- opisać i zaprezentować działania bez sekcji i z sekcją
4. Wywołanie funkcji FreeRtos z przerwania
Zadanie 5
- utworzyć przerwanie zewnętrzne reagujące na przycisk
- w przerwaniu ustawiać semafor – “buttonISR”
- 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ęć
- licznik liczy ilość naciśnięć od początku pracy programu
- czy program działa prawidłowo?
Zadanie 6
- zmienić semafor z poprzedniego zadania na semafor zliczający
- jak teraz działa program, jakie są wady/zalety?