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, 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
- 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
Semafor binarny
- utworzyć program z 3 wątkami (1 producent i 2 konsumentów)
- producent produkuje 10 nowych wiadomość (ustawia semafor binarny 10 razy) i przechodzi do pustej pętli
- 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?
Semafor zliczający
- utworzyć program z 3 wątkami (1 producent i 2 konsumentów)
- producent produkuje 10 nowych wiadomość (ustawia semafor zliczający 10 razy) i przechodzi do pustej pętli
- 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 semafor zliczający w porównaniu do semafora binarnego?
3. Bezpieczne dzielnie wspólnych zasobów – “sekcja krytyczna”
Zadanie 4
- utworzyć program z zabezpieczeniem przed jednoczesnym dostęp do zasobu wspólnego jakim jest interfejs komunikacyjny UART
- do zabezpieczenia wykorzystać mechanizm semaforów
- 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
- 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ęć, jednocześnie miga diodą LED co 1s
- licznik liczy ilość naciśnięć od początku pracy programu
- czy program działa prawidłowo?