Współczesne komputery to gigabajty i gigaherce. A jednak wśród nas są miliardy urządzeń, mających do dyspozycji znacznie skromniejsze zasoby – i ktoś musi tworzyć na nie oprogramowanie. Wykorzystywane do tego biblioteki i środowiska deweloperskie nie są jednak zbyt wygodne. Tym bardziej interesujący dla programistów powinien okazać się być Qt for MCUs, zestaw narzędzi przeznaczonych do budowy aplikacji z graficznym interfejsem użytkownika na urządzenia napędzane mikrokontrolerami ARM Cortex-M. To poważne wyzwanie – do tej pory aplikacje Qt wymagały sprzętu z 256 MB RAM i procesorem taktowanym przynajmniej 500 MHz.
Qt for MCUs to wynik projektu badawczego, rozpoczętego w maju 2018 roku. Jego celem było przeniesienie biblioteki Qt na system czasu rzeczywistego RTEMS, chętnie wykorzystywany w urządzeniach wbudowanych. Było to niezbędne posunięcie, ponieważ Qt nie może ot tak działać na metalu, wykorzystuje wiele standardowych funkcji POSIX. Jeśli by się chciało przenieść Qt na mikrokontrolery, trzeba by więc było napisać od podstaw własny, zgodny z POSIX system operacyjny. Na szczęście nie było to konieczne, RTEMS jest nie tylko projektem Open Source, ale też wspiera wykorzystywany w Qt (od wersji 5.7) język C++ 11, ma świetną dokumentację i aktywną społeczność.
Wymagania mniejsze o trzy rzędy wielkości
Oczywiście jakieś minimalne wymogi sprzętowe muszą być zachowane. Trudno sobie wyobrazić uruchomienie aplikacji z GUI na najmniejszych mikrokontrolerach, mających 128 bajtów RAM. Najmniejszym urządzeniem, na którym Qt z RTEMS udało się uruchomić była płytka STM32F469 z procesorem Cortex-M4. To i tak nieźle, chodzi bowiem o mikrokontroler z 2 MB pamięci Flash i 324 KB RAM, z akceleratorem grafiki Chrom-ART obsługujący wyświetlacze o rozdzielczości 800×480 pikseli.
Teraz już na takie skromne pamięciowo platformy sprzętowe można będzie pisać oprogramowanie w C++ i Qt, z wykorzystaniem wzorca projektowego Model/Widok. Upraszcza on wzorzec Model-Widok-Kontroler, łącząc ze sobą warstwy prezentacji i kontroli i pozwalając programistom na integrowanie kodu frontendu z napisanym w C czy C++ kodem backendu.
Do tworzenia interfejsów użytkownika wykorzystywany jest moduł Qt Quick. Tworzy się je w deklaratywnym języku QML (Qt Meta-Object Language), a dzięki API udostępnianemu przez Qt Quick można interfejs rozszerzać o własny kod C++. Aby ułatwić tworzenie aplikacji, przygotowano liczne kontrolki Qt Quick Controls, pozwalające na szybkie zestawienie gotowego interfejsu użytkownika.
Nie trzeba tu uczyć się żadnych nowych narzędzi deweloperskich, od początku bowiem Qt for MCUs był projektowany z myślą o wpisaniu się w istniejące schematy pracy programistów. Wszystko robi się w Qt Design Studio i Qt Creatorze.
Więcej informacji na temat Qt for MCUs znaleźć można na blogu Qt. Jak widać, producent biblioteki celuje przede wszystkim w branżę motoryzacyjną i urządzenia Internetu Rzeczy. Przedstawione tu rozwiązanie na pewno wydaje się mieć większy sens, niż starania np. Mozilli, chcącej na tak skromne sprzętowo platformy przenieść technologie webowe.