Zadania wykonywane w czasie laboratorium należy dokumentować w postaci zdjęć przedstawiających postępy prac.

Zakres laboratorium:
  • zapoznanie się z systemem czasu rzeczywistego FreeRTOS, – konfiguracja a STM32IDE: link
  • 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)
Zadanie 1
  • skonfigurować projekt na zestawie sprzętowym zawierający system FreeRTOS
  • zmienić konfigurację zegara “Timebase Source” na TIM16 – po co taka zmiana?
  • dodać obsługę I2C i podłączyć wyświetlacz LCD (SDA – D4, SCL-D5)
  • stworzyć dwa wątki (dodać wątki za pomocą konfiguratora projektu STM32):
    • 1 wątek – miga diodą LED z częstotliwością 1Hz
    • 2 wątek – wyświetla na wyświetlaczu LCD napis: “Hello World: xxx” – gdzie xxx to sekundy od uruchomienia wątku – odświeżanie LCD co 1 sekundę

Biblioteka LCD- LAB 1

Zadanie 2
  • skasować poprzedni wątek LCD i utworzyć taki sam wątek samodzielnie z wykorzystaniem funkcji “xTaskCreate”
  • skasować wątek 1 i utworzyć taki sam jak wyżej
  • dodać obsługę USART2
  • zainstalować terminal: sudo apt-get install cutecom
  • uruchomić terminal na odpowiednim porcie
  • zapoznać się z argumentami tworzenie wątków, do czego służą
  • utworzyć 3 i 4 wątek za pomocą “xTaskCreate”
  • wątki 3 i 4 niech wysyłają na terminal komunikat: “Wątek 3: xxx” – gdzie xxx to sekundy od uruchomienia wątku – odświeżanie LCD co 1 sekundę
  • jak wygląda kolejność wysyłanych komunikatów, czy zawsze jest taka sama?
Zadanie 3 – semafory
  • wyłączyć wątek 3, zmniejszyć czas opóźnienia w wątku 2 na 250ms
  • dodać semafor binarny “xSemaphoreCreateBinary
  • jak działa teraz program?
  • wykorzystać semafor binarny aby wątek 2 był zablokowany, oczekiwał na semafor ustawiany przez wątek 1
  • jak działa teraz program?
Zadanie 4
  • uruchomić wątek 3,zmienić jego opóźnienie na 100ms,
  • jak działa teraz program?
  • dodać semafor binarny aby wątek 3 był zablokowany, oczekiwał na semafor ustawiony przez wątek 2
  • jak działa teraz program?
  • narysować diagram jak teraz zależą wątki od blokad zrobionych przez semafory
Zadanie 5 – semafor zliczający
  • skasować poprzednie wątki,
  • utworzyć 4 nowe wątki, wysyłające napisy na terminal: “Wątek 1: xxx”, “Wątek 2: xxx”, “Wątek 3: xxx”, “Wątek 4: xxx”,
  • wątek 1 wykonuje się co 1sekunde, pozostałe wątki co 5 sekund,
  • utworzyć semafor zliczający “xSemaphoreCreateCounting ” – co to jest za semafor?
  • ustawić wątek 1 aby oczekiwało na semafor zliczający,
  • ustawić w wątkach 2-4 funkcję ustawiającą semafor zliczający,
  • jak działa teraz program?
  • problem pakowania paczek-wiele osób pakuje zamówienia a jedna je wysyła – które zadania będą kim?