ISIX-RTOS – przykłady w języku C: termometr z wyświetlaczem LED-RGB

List. 1. Funkcja main

Najpierw tworzony jest niezależny wątek migania diodą D1 (zamontowana na pytce „motyla”), następnie tworzona jest kolejka FIFO, której maksymalną pojemność ustawiono na 10 elementów zdefiniowanych jako struktura msg. Następnie inicjalizowana jest biblioteka obsługi magistrali I2C, a następnie w przypadku pomyślnego utworzenia kolejki FIFO, tworzone jest zadanie odczytu temperatury temp_read_task oraz wątek wyświetlania temperatury display_srv_task. Po utworzeniu wszystkich wątków, uruchamiany jest planista zadań systemu ISIX. Strukturę wiadomości nieco odmienną niż w poprzednim przypadku zdefiniowano w sposób pokazany na list. 2.

 

List. 2. Struktura wiadomości przekazywanej pomiędzy wątkami

W tym przypadku celowo, aby pokazać że operacje zmienno-przecinkowe wykonywane są przez rdzeń Cortex-M3 bardzo sprawnie, zdecydowano się na zdefiniowanie temperatury w postaci liczby zmiennoprzecinkowej typu float. Ten typ zostanie również użyty w przypadku obliczenia nasycenia barw w zależności od temperatury, o czym napiszemy w dalszej części.
Za odczytywanie temperatury z czujnika MCP9801 odpowiada wątek temp_read task , który działa identycznie jak w poprzednim przykładzie, jedyna różnica występuje w funkcji tempsensor_get() (list. 3), w której wartość temperatury jest przeliczana na liczbę zmiennoprzecinkową.

O autorze