Skopiowano link do schowka!

Optymalizacja zasobów graficznych w systemach wbudowanych

Spis treści

    Dlaczego warto optymalizować zasoby graficzne?

    Optymalizacja zasobów graficznych w systemach wbudowanych polega przede wszystkim na znalezieniu równowagi między jakością obrazu a ograniczonymi zasobami systemowymi. W przeciwieństwie do środowisk stacjonarnych lub mobilnych platformy wbudowane – zwłaszcza te oparte na mikrokontrolerach (MCU) – działają w warunkach ścisłych ograniczeń dotyczących pamięci RAM, pamięci masowej, mocy przetwarzania i przepustowości pamięci. Nawet w przypadku bardziej wydajnych systemów opartych na procesorach MPU lub systemie Linux zasoby te nie są nieograniczone i mogą szybko stać się wąskim gardłem podczas obsługi złożonych interfejsów użytkownika.

    Z tego powodu zasoby graficzne, takie jak obrazy, czcionki i animacje, nie mogą być traktowane jako elementy „dodatkowe”. Ich rozmiar, format i struktura mają bezpośredni wpływ na wydajność systemu, szybkość działania, a czasem nawet na wykonalność produktu. Optymalizacja nie jest zatem opcjonalnie wykonywanym etapem udoskonalania, lecz fundamentalną częścią projektowania wbudowanych GUI.

    W praktyce optymalizacja zasobów polega na zmniejszeniu zajętości pamięci, zminimalizowaniu transferu danych oraz obniżeniu kosztów renderowania, przy jednoczesnym zachowaniu akceptowalnej jakości wizualnej. Konkretne techniki i priorytety zależą od platformy docelowej i jej głównych wąskich gardeł, co zostanie omówione bardziej szczegółowo w niniejszym artykule.

    Poniżej przedstawiono kilka popularnych metod optymalizacji zasobów graficznych:

    1. Zmniejszenie głębi kolorów
    2. Kompresja zasobów
    3. Wstępne renderowanie i spłaszczanie
    4. Optymalizacja rozdzielczości i skalowania
    5. Częściowe odświeżanie
    6. Strumieniowanie zasobów z pamięci zewnętrznej

    Zmniejszenie głębi kolorów

    Zmniejszenie formatu piksela (np. ARGB8888 → RGB565, L8, A4) jest jednym z najskuteczniejszych sposobów na zmniejszenie zużycia pamięci i przepustowości. Mniejsza liczba bitów na piksel przekłada się bezpośrednio na mniejszy rozmiar zasobów i szybszy transfer do bufora ramki.

    Technika ta ma szczególne znaczenie w przypadku mikrokontrolerów (MCU), gdzie przepustowość zarówno pamięci RAM, jak i pamięci flash jest ograniczona. Nawet w systemach z procesorami (MPU) może ona znacznie zmniejszyć nacisk na przepustowość w aplikacjach intensywnie wykorzystujących interfejs użytkownika.

    Głównym kompromisem jest obniżona jakość obrazu – przede wszystkim pasmowanie barw i ograniczona precyzja kanału alfa.

    Najlepsze gdy:

    • Ograniczeniem jest rozmiar pamięci RAM lub bufora ramki
    • przepustowość wyświetlacza stanowi wąskie gardło

    Kompresja zasobów

    Kompresja zmniejsza ilość miejsca zajmowanego przez zasoby graficzne, co pozwala na zmieszczenie większej ilości treści w ograniczonej pamięci. Typowe metody obejmują zarówno proste algorytmy RLE, jak i schematy oparte na algorytmie LZ lub formaty przeznaczone specjalnie dla obrazów.

    W mikrokontrolerach kompresja jest często konieczna ze względu na ograniczoną pojemność pamięci Flash. Jednak dekompresja powoduje narzut procesora i czasami wymaga użycia buforów tymczasowych w pamięci RAM.

    Kluczową decyzją projektową jest znalezienie równowagi między oszczędnością miejsca na dysku a kosztami związanymi z czasem wykonania programu.

    Najlepsze gdy:

    • Pamięć flash/pojemność pamięci jest ograniczona
    • Procesor dysponuje wystarczającym zapasem mocy obliczeniowej dla dekompresji

    Wstępne renderowanie i spłaszczanie

    Zamiast renderować złożone elementy interfejsu użytkownika (przejścia kolorów, cienie, efekty) w czasie wykonania, można je przeprowadzić w formie wstępnego renderowania do postaci statycznych bitmap. Dzięki temu obciążenie przenoszone jest z procesora na pamięć masową.

    Jest to powszechne podejście w systemach opartych na MCU bez przyspieszenia przez procesor graficzny (GPU), w których kluczowe znaczenie ma przewidywalny czas renderowania.

    Kompromis polega na wzroście wykorzystania technologii Flash oraz malejących poziomach elastyczności – każda zmiana wizualna wymaga ponownego wygenerowania zasobów.

    Najlepsze gdy:

    • Procesor stanowi wąskie gardło
    • Interfejs użytkownika jest w większości statyczny

    Optymalizacja rozdzielczości i skalowania

    Wykorzystanie zasobów o rozdzielczości odpowiadającej docelowej pozwala uniknąć skalowania w czasie wykonania, co może być kosztowne pod względem obciążenia procesora lub przepustowości pamięci.

    W systemach o ograniczonych zasobach nawet proste operacje skalowania mogą negatywnie wpływać na wydajność, zwłaszcza gdy są stosowane do wielu elementów interfejsu użytkownika w każdej ramce.

    Przygotowanie zasobów w dokładnej rozdzielczości (lub w ograniczonym zakresie rozdzielczości) gwarantuje przewidywalną wydajność i mniejsze zużycie zasobów.

    Najlepsze gdy:

    • Ograniczona wydajność procesora lub przepustowość
    • Układ interfejsu użytkownika jest stały lub przewidywalny

    Częściowe odświeżanie

    Zamiast odświeżać cały ekran w każdej ramce, aktualizowane są jedynie te obszary, w których nastąpiły zmiany. Pozwala to znacznie zmniejszyć ilość danych przesyłanych do wyświetlacza w każdej ramce.

    W wielu systemach wbudowanych głównym wąskim gardłem jest przepustowość pamięci, a nie procesor. Częściowe odświeżanie bezpośrednio rozwiązuje ten problem poprzez zminimalizowanie transferu pikseli. Zastosowanie częściowego odświeżania zmniejsza zapotrzebowanie na przepustowość pamięci, a także może zmniejszyć obciążenie procesora, o ile nie jest on ponownie angażowany do obsługi „dirty region”, które ulegają częstszym zmianom.

    Zarówno TouchGFX, jak i LVGL realizują tę koncepcję wewnętrznie za pomocą obszarów „dirty region” lub unieważnionych.

    Najlepsze gdy:

    • przepustowość interfejsu wyświetlacza jest ograniczona (SPI, RGB itp.)
    • Zmiany w interfejsie użytkownika są zlokalizowane

    Strumieniowanie zasobów z pamięci zewnętrznej

    Strumieniowanie zasobów z pamięci zewnętrznej oznacza dostęp do zasobów interfejsu użytkownika (takich jak obrazy, czcionki czy animacje) bezpośrednio z pamięci nieulotnej (np. zewnętrznej pamięci Flash, QSPI lub systemu plików) w czasie wykonania programu, bez konieczności ich trwałego kopiowania do pamięci RAM.

    Zamiast wstępnie ładować całe zasoby, system odczytuje tylko niezbędne fragmenty danych w razie potrzeby i przeprowadza przetwarzanie lub renderowanie na bieżąco. Pozwala to znacznie zmniejszyć zużycie pamięci RAM, a jednocześnie umożliwia korzystanie ze złożonej grafiki i dużych zestawów zasobów.

    Technika ta jest powszechnie stosowana w systemach wbudowanych o ograniczonej pamięci, umożliwiając tworzenie rozbudowanych interfejsów użytkownika dzięki wykorzystaniu przepustowości pamięci zewnętrznej zamiast polegania na ograniczonej pamięci RAM.

    Głównym ograniczeniem jest szybkość dostępu – przepustowość pamięci zewnętrznej i opóźnienia mogą stać się wąskim gardłem.

    Najlepsze gdy:

    • Pamięć RAM jest bardzo ograniczona
    • aktywa są duże lub liczne

    Podsumowanie

    W praktyce optymalizacja zasobów graficznych nie polega tyle na zastosowaniu jednej techniki, co na wyborze odpowiedniej kombinacji w oparciu o ograniczenia systemowe. Każda metoda dotyczy innego wąskiego gardła – czy to pamięci RAM, pojemności pamięci Flash, obciążenia procesora, czy przepustowości pamięci – a poprawa w jednym obszarze często wiąże się z pogorszeniem wyników w innym.

    W systemach opartych na MCU nacisk kładzie się zazwyczaj na minimalizację zużycia pamięci i przepustowości: niezbędne jest często zmniejszenie głębi kolorów, stosowanie kompresji, strumieniowanie zasobów oraz korzystanie z częściowego odświeżania ekranu. Na platformach MPU/Linux, mimo że zasoby są mniej ograniczone, podobne techniki nadal mają znaczenie – zwłaszcza w aplikacjach z rozbudowanym interfejsem użytkownika, gdzie przepustowość i wydajność pamięci podręcznej mogą ograniczać wydajność.

    Najważniejsze jest wczesne zidentyfikowanie głównego wąskiego gardła i odpowiednia optymalizacja. W wielu rzeczywistych wbudowanych GUI okazuje się, że jest to raczej przepustowość pamięci niż sama wydajność procesora. Zrozumienie tego pomaga w podejmowaniu decyzji dotyczących np. wyboru formatu piksela, strategii odświeżania oraz struktury zasobów.

    Ostatecznie skuteczna optymalizacja sprowadza się do kompromisów. Nie ma jednego, uniwersalnie optymalnego podejścia – istnieją jedynie rozwiązania, które najlepiej pasują do danej platformy sprzętowej, złożoności interfejsu użytkownika oraz docelowej wydajności.

    ODKRYJ NASZĄ

    Whitepaper

    Osiągnij idealną interakcję użytkownika z wyświetlaczem dzięki odpowiedniemu czujnikowi Touch Sensor IC. Czy kiedykolwiek zmagałeś się z problemami związanymi z fantomowymi dotknięciami lub certyfikacją? Rozwiń swoje prace B+R jak profesjonalista dzięki naszemu Whitepaperowi!

    Przejdź do naszego katalogu produktów i zobacz, jak możesz oszczędzać dzięki jakości, nie na jakości.

    Skontaktuj się z nami już teraz, oszczędzaj dzięki jakości, nie na jakości.