Meluncurkan Qt pada Mikrokontroler STM32 dengan Embox RTOS: Panduan Praktis Performa
Sistem tersemat saat ini diharapkan mampu menyediakan fungsi yang lebih kaya. Linux menawarkan ekosistem pustaka dan alat yang luas, namun persyaratan hardwarenya—terutama memori—seringkali meningkatkan biaya dan konsumsi daya. Mikrokontroler modern (MCU), seperti seri STM32, menawarkan sumber daya yang cukup untuk banyak aplikasi cerdas sambil tetap hemat biaya dan efisien energi.
Penggunaan sistem operasi real-time (RTOS) yang dapat menghosting perangkat lunak Linux—misalnya Embox RTOS—memungkinkan pengembang untuk memanfaatkan Linux pada MCU. Dalam artikel ini, kami membahas cara menjalankan aplikasi Qt pada dua papan Cortex-M7 STM32 (STM32F746G-Discovery dan STM32F769I-Discovery) di bawah Embox.
Latar Belakang
Sebelumnya, kami telah mendemonstrasikan contoh Qt “moveblocks” pada papan STM32F746-Discovery. Sekarang kami memperluasnya ke contoh “animatedtiles”, yang menawarkan grafik gaya 3D interaktif dan cocok untuk layar sentuh. Kami ingin menilai apakah CPU dan memori MCU mampu mendukung rendering yang lancar pada layar 480×272 atau 800×480.
Membangun Aplikasi
Pertama, kami membangun contoh Qt untuk QEMU, emulator open-source. Menjalankan aplikasi di QEMU menghilangkan kebutuhan untuk alokasi memori terlebih dahulu, memastikan semua dependensi tersedia. Setelah diverifikasi, kami menambahkan komponen yang diperlukan ke file konfigurasi STM32.
Peluncuran Pertama pada Papan Target
Aplikasi berjalan pada STM32F746G-Discovery, namun hanya setengah layar atas yang terisi. Debugging langsung pada papan memungkinkan, namun pendekatan yang lebih efisien adalah menggunakan lingkungan host untuk debugging awal.
Debugging pada Host
Untuk menjalankan dan men-debug contoh, instal pustaka Qt dan QVFB (Qt Virtual Framebuffer). QVFB menyediakan layar virtual yang dapat dirender oleh Qt. Bangun QVFB sesuai instruksi resmi.
Luncurkan QVFB dengan resolusi papan:
./qvfb -width 480 -height 272 -nocursor
Kompilasi Qt dengan profil embedded (tanpa X11) dan nonaktifkan modul yang tidak diperlukan:
./configure -opensource -confirm-license -debug \\\n -embedded -qt-gfx-qvfb -qvfb \\ -no-javascript-jit -no-script -no-scripttools \\ -no-qt3support -no-webkit -nomake demos -nomake examples
Bangun dan luncurkan animatedtiles dengan QVFB:
./examples/animation/animatedtiles/animatedtiles -qws -display QVFb:0
Aplikasi lagi hanya menempati setengah layar atas. Memeriksa examples/animation/animatedtiles/main.cpp menunjukkan bahwa tampilan ditampilkan dalam mode jendela. Menambahkan flag -fullscreen menyelesaikan masalah.
Menyebarkan ke STM32F746-Discovery
Setelah memodifikasi sumber, kami membangun ulang aplikasi untuk Embox dan menjalankannya di QEMU. Saat meluncurkan pada papan fisik, kesalahan “Out Of Memory” menunjukkan heap tidak cukup. Untuk menentukan ukuran yang diperlukan, kami menggunakan alat Massif dari Valgrind.
valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen ms_print animatedtiles.massif > animatedtiles.out
Massif melaporkan kebutuhan heap sekitar 2,7 MB. Meningkatkan heap menjadi 3 MB dalam konfigurasi Embox memungkinkan demo berjalan layar penuh.
Menyebarkan ke STM32F769I-Discovery
STM32F769I-Discovery memiliki layar 800×480 dan 16 MB SDRAM eksternal. Framebuffer saja mengonsumsi sekitar 0,8 MB (800×480×2 byte). Kami hanya perlu menyesuaikan ukuran heap.
Mulai QVFB untuk resolusi yang lebih besar:
./qvfb -width 800 -height 480 -nocursor &
Jalankan Massif lagi:
valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen ms_print animatedtiles.massif > animatedtiles.out
Massif melaporkan sekitar 6 MB heap. Mengonfigurasi heap menjadi 6 MB memungkinkan operasi layar penuh pada papan STM32F769I.

Tonton demo dalam video di bawah atau ikuti langkah-langkah di wiki GitHub kami untuk mereproduksi hasilnya.
Catatan
- https://habr.com/ru/company/embox/blog/459730/ (dalam bahasa Rusia, juga tersedia dalam bahasa Inggris: https://sudonull.com/post/25508-Porting-Qt-to-STM32-Embox-Blog)
- https://alexkalmuk.medium.com/a-little-about-graphics-subsystem-internals-on-microcontrollers-d952cfd0966a
Anton Bondarev adalah pendiri Embox RTOS. Ia memperoleh gelar master dalam teknik elektro dari Saint Petersburg Electrotechnical University (LETI) pada 2003 dan kemudian menyelesaikan kursus pascasarjana dalam rekayasa perangkat lunak di Saint-Petersburg State University. Dengan lebih dari 20 tahun pengalaman dalam pemrograman sistem dan tersemat, ia memimpin proyek Embox.
Alexander Kalmuk adalah pendiri bersama Embox RTOS. Ia memiliki gelar master dalam matematika dan rekayasa perangkat lunak dari Saint-Petersburg State University (2014) dan telah mengambil studi pascasarjana dalam teori kontrol. Dengan lebih dari satu dekade pemrograman sistem tersemat, ia merupakan kontributor kunci dalam pengembangan Embox.
Konten Terkait
- Menggunakan Linux dengan aplikasi kritis: Seperti mencampur minyak dan air?
- Mengapa Yocto Project untuk proyek IoT saya?
- Mengantisipasi kebutuhan keahlian Automotive Grade Linux
- MCU memungkinkan Linux untuk IoT industri
- Platform open-source target IoT dengan Linux tersemat
- Driver perangkat Linux tersemat: Memahami peran mereka
- Pembaruan OTA untuk Linux tersemat, bagian 1 – Dasar-dasar dan implementasi
- Cara menginstal web server tersemat yang aman pada perangkat WiFi $3
- Menguasai siklus hidup pengembangan perangkat lunak yang tak berujung untuk sistem terhubung—atau itu akan menguasai Anda
Untuk lebih banyak konten Embedded, berlangganan newsletter harian mingguan Embedded.