Nowa wersja TouchGFX dla STM32

| Technika

STMicroelectronics udostępnił nową wersję oprogramowania TouchGFX realizującego interfejs użytkownika dla mikrokontrolerów STM32, dodając nowe funkcje, które umożliwiają płynniejsze i bardziej dynamiczne działanie oraz zmniejszają zapotrzebowanie na pamięć i moc procesora. Jest to pierwsza duża aktualizacja od czasu nabycia tego rozwiązania w 2018 roku.

Nowa wersja TouchGFX dla STM32

Ponieważ systemy embedded nieustannie zyskują na popularności, obecność wyświetlacza i graficzny interfejs użytkownika jest w stanie znacznie poprawić wrażenia konsumentów. Dlatego coraz więcej projektantów systemów wbudowanych pracuje teraz nad GUI i próbuje dopasować je do działania na mikrokontrolerach o ograniczonych zasobach pamięci i wydajności. Odpowiedzią na takie potrzeby rynku jest nowa wersja oprogramowania TouchGFX.

Jest to bezpłatne oprogramowanie narzędziowe wchodzące w skład środowiska projektowego dla STM32. Składa się ono z dwóch części – działającego na pececie TouchGFX Designer przeznaczonego do projektowania i konfigurowania interfejsu użytkownika oraz oprogramowania TouchGFX Engine, które działa na urządzeniu końcowym. Najnowsza wersja pozwala na tworzenie jeszcze bardziej wyrafinowanej grafiki, także na słabszych jednostkach bez zewnętrznej pamięci RAM lub pamięci Flash oraz przy mniejszych potrzebach energetycznych tych aplikacji. Poniżej zamieszczamy przegląd nowości.

Częściowy bufor ramki

Częściowe buforowanie ramek to ważna innowacja w nowej wersji. Bufor ramki to ciągła przestrzeń pamięci, która przechowuje reprezentację każdego z pikseli, które pojawią się na wyświetlaczu. Na przykład standardowy 24-bitowy obraz 390×390 pikseli wymaga bufora ramki wynoszącego 3 650 400 bajtów lub 440 KB, co stanowi prawie 70% pamięci SRAM dostępnej w STM32L4+. Jeśli aplikacja wymaga dwóch lub trzech buforów ramek, wymagania pamięci proporcjonalnie rosną. Poza tym pobieranie dużego obrazu ramki zajmuje czas, ponieważ więcej danych trzeba przesłać z pamięci do wyświetlacza, co spowalnia działanie. Jeśli cały obraz się nie zmienia, zmiany można ograniczyć wyłącznie do fragmentu.

Jak nazwa wskazuje, częściowy bufor ramki przechowuje tylko jej fragment, co zmniejsza zajętość pamięci. W programie można skonfigurować sekcję, która się zmieni, a następnie przechowywać wiele częściowych buforów ramki dla niej. Zamiast pobierać cały bufor, system używa znacznie mniejszych plików, co zwiększa ogólną wydajność. Technologia działa najlepiej w przypadku krótkich animacji, takich jak zegary lub wykresy.

Tryb częściowego buforowania ramki pozwala teraz na działanie przy użyciu zaledwie 6 KB pamięci RAM mikrokontrolera. W pełni funkcjonalny interfejs użytkownika może teraz zajmować zaledwie 16 KB pamięci RAM, dzięki czemu jednostki STM32 o małych zasobach mogą także zapewnić doskonałą jakość grafiki bez konieczności dodawania pamięci zewnętrznej. Również nowa reprezentacja 8-bitowa luminancji (L8) z 16-bitową, 24-bitową i 32-bitową paletą kolorów zmniejsza zapotrzebowanie na pamięć Flash.

Kompresja danych grafiki L8

Dane graficzne zajmują dużo miejsca w pamięci i do tej pory jedyną rzeczą, którą mogli zrobić programiści, było zmniejszenie poziomu szczegółowości detali w celu zmniejszenia rozmiaru pliku. Niestety takie działanie z reguły pogarszało atrakcyjność graficzną GUI. Teraz te dane mogą być kompresowane bezstratnie w formacie L8. Do kompresji wykorzystywany jest akcelerator ChromART obecny w mikrokontrolerach STM32. Tak długo, jak grafi- ka używa maksymalnie 256 kolorów, co często zdarza się w przypadku tła, ikon lub przycisków na małych urządzeniach embedded, programiści mogą zdecydować się na kompresję danych graficznych w formacie L8, zaznaczając jedynie pole w TouchGFX Designer. Pliki wynikowe z grafiką są dzięki temu nawet o 75% mniejsze, a faza dekompresji jest wydajna obliczeniowo, ponieważ wykorzystuje silnik jednostki ChromART. Kompresja L8 jest bezstratna, a więc nie powoduje utraty jakości.

Nowe podejście do renderowania ramki

Nawet w mikrokontrolerach o najmniejszych zasobach pamięci TouchGFX maksymalizuje wydajność poprzez wykorzystanie akceleratora STM32 Chrom- ART do przyspieszenia tworzenia grafiki i obsługi efektów, a dodatkowy bufor z dynamiczną bitmapą zmniejsza obciążenie procesora i daje możliwość płynnego działania animacji z dużą częstotliwością odświeżania obrazu.

Cacheable Container to rozwiązanie wykorzystujące pamięć podręczną dla map bitowych w celu znacznego przyspieszenia wydajności graficznej i zapewnienia animacji w większej liczbie klatek na sekundę. Bez wsparcia ze strony cache prosta animacja pełnoekranowa (240×320 pikseli), która w starej wersji działa z prędkością 9 fps, w nowej osiąga 60 fps, co zapewnia znacznie płynniejszy obraz, zwłaszcza dla małych dynamicznych elementów wyświetlanych przed statycznym tłem.

W tradycyjnym systemie animacja polega na przerysowaniu każdej klatki obrazu, co wymaga wielu obliczeń. W typowym przypadku ruchome przejście między dwoma ekranami aplikacji wymaga przygotowania około 20 klatek, a przerysowanie każdej klatki zajmuje około 100 ms. Cacheable Container omija ten problem, przechowując pierwszą i ostatnią ramkę w osobnym kontenerze w postaci mapy bitowej w pamięci RAM. Zamiast obliczać animację, system pobiera dwa obrazy z pamięci za pomocą DMA i pokazuje je w różnych miejscach dzięki prostej metodzie Dynamic Bitmap. MCU nie musi już renderować każdej klatki, co znacznie poprawia wydajność. Programiści muszą jedynie zaznaczyć pole Cacheable w TouchGFX Designer, wybrać lokalizację w pamięci kontenerów, które chcą buforować i wywołać je w razie potrzeby. Dzięki tej technice czas renderowania skraca się ze 100 do 5 ms.

Wiele użytecznych dodatków

TouchGFX Designer otrzymał także kilka ciekawych dodatków np. widżety, takie jak zegar analogowy i cyfrowy lub maper tekstur, co oznacza, że programiści mogą rozpocząć tworzenie programu za pomocą prostego przeciągania i upuszczania. Definiowane wyzwalacze i akcje uwalniają od konieczności pisania kodu do tworzenia nawet zaawansowanych funkcji, a nowa karta Image pozwala użytkownikom szybko konfigurować poszczególne atrybuty grafiki, takie jak format, metoda ditheringu oraz obracanie. Wprowadzono również liczne ulepszenia w zakresie wydajności, które przyspieszają automatyczne generowanie kodu, a także nowe, łatwe w użyciu funkcje przewijania do przodu i do tyłu tekstu. Wreszcie, TouchGFX Designer jest teraz w stanie wygenerować i załadować system dwa razy szybciej i zrobić to tylko na żądanie, a nie automatycznie.

Oszczędność zapewnia także dostępna 6-bitowa głębia kolorów, co oszczędza zarówno pamięć RAM, jak i Flash, bo 64 kolory w wielu przypadkach całkowicie wystarczają do tworzenia podstawowych interfejsów GUI. Nowa jest także obsługa zewnętrznej pamięci Flash bez mapowania, która pomaga budować podstawowe interfejsy użytkownika przy małych zasobach systemowych.