Menjalankan Qt di STM32. Bagian 2. Sekarang dengan pseudo 3d dan layar sentuh

Di proyek Embox , beberapa waktu lalu kami meluncurkan Qt di platform STM32 . Contohnya adalah aplikasi moveblocks, sebuah animasi dengan empat kotak biru yang bergerak melintasi layar. Kami ingin lebih, misalnya, untuk menambahkan interaktivitas, karena layar sentuh tersedia di papan. Kami memilih aplikasi animatedtiles hanya karena terlihat keren di komputer juga. Dengan menekan tombol virtual, banyak ikon dengan mulus bergerak di sekitar layar, berkumpul dalam berbagai bentuk. Selain itu, ini terlihat seperti animasi 3d, dan kami bahkan ragu apakah mikrokontroler akan menangani tugas seperti itu.



Majelis



Pertama-tama, kita mulai dengan perakitan. Cara termudah untuk melakukannya adalah di emulator QEMU. di sana semuanya cocok persis dari memori, dan oleh karena itu mudah untuk memeriksa apakah semua komponen cukup untuk membangun aplikasi. Setelah memeriksa bahwa semua ubin animasi berhasil dirakit, saya dengan mudah mentransfernya ke konfigurasi untuk papan yang saya butuhkan.



Pertama mulai di papan



Ukuran layar untuk STM32F746G-Discovery adalah 480x272, ketika aplikasi diluncurkan, itu hanya digambar di bagian atas layar. Kami tentu ingin mencari tahu apa masalahnya. Tentu saja, Anda dapat langsung melakukan debug, tetapi ada solusi yang lebih mudah. menjalankan aplikasi di Linux dengan dimensi 480x272 yang sama dengan framebuffer virtual QVFB.



Meluncurkan di Linux



Untuk berjalan di Linux, kita membutuhkan tiga bagian QVFB, pustaka Qt, dan aplikasi itu sendiri.



QVFB adalah aplikasi biasa yang akan memberi kita layar virtual untuk menjalankan Qt. Kami mengumpulkannya seperti yang tertulis dalam dokumentasi resmi .



Luncurkan dengan ukuran layar yang diinginkan:



./qvfb -width 480 -height 272 -nocursor
      
      





Selanjutnya, kami membangun pustaka Qt sebagai tertanam, mis. Dengan opsi-tertanam ditentukan. Saya juga menonaktifkan berbagai modul untuk mempercepat build, pada akhirnya konfigurasinya terlihat seperti ini:



./configure -opensource -confirm-license -debug \
    -embedded -qt-gfx-qvfb -qvfb \
    -no-javascript-jit -no-script -no-scripttools \
    -no-qt3support -no-webkit -nomake demos -nomake examples
      
      





Selanjutnya kita membangun aplikasi animatedtiles (qmake + make). Dan kami meluncurkan aplikasi yang telah dikompilasi, mengarahkannya ke QVFB kami:



./examples/animation/animatedtiles/animatedtiles -qws -display QVFb:0
      
      





Setelah diluncurkan, saya melihat bahwa di Linux itu juga menarik hanya ke sebagian layar. Saya memodifikasi animatedtiles sedikit dengan menambahkan opsi "-fullscreen", ketika ditentukan, aplikasi dimulai dalam mode layar penuh.



Luncurkan di Embox



Kami akan menggunakan kode sumber aplikasi yang dimodifikasi di Embox. Kami membangun kembali dan menjalankan. Aplikasi tidak berjalan dan Qt kehabisan pesan memori. Kami melihat konfigurasi Embox dan menemukan bahwa ukuran heap disetel ke 2MB dan jelas tidak cukup. Sekali lagi, Anda dapat mencoba mencari tahu hal ini secara langsung di papan tulis, tetapi mari kita lakukan dengan nyaman di Linux.



Untuk melakukan ini, luncurkan aplikasi sebagai berikut:



$ valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen
$ ms_print animatedtiles.massif > animatedtiles.out
      
      





Di file animatedtiles.out, kita melihat nilai maksimum hunian heap sekitar 2,7 MB. Bagus, sekarang Anda tidak perlu menebak-nebak, tapi kembali ke Embox dan setel ukuran heap menjadi 3MB.



Animatedtiles diluncurkan.



Luncurkan di STM32F769I-Discovery.



Mari kita coba memperumit tugas lebih rumit lagi, dan menjalankan contoh yang sama pada mikrokontroler yang serupa, tetapi hanya dengan resolusi layar yang lebih tinggi - STM32F769I-Discovery (800x480). Artinya, sekarang framebuffer akan membutuhkan 1,7 kali lebih banyak memori (ingat bahwa STM32F746G memiliki layar 480x272), tetapi ini dikompensasikan dengan dua kali ukuran SDRAM (16 MB versus 8 MB SDRAM yang tersedia untuk STM32F746G).



Untuk memperkirakan ukuran heap, seperti di atas, pertama-tama jalankan Qvfb dan aplikasi Linux kami:



$ ./qvfb -width 800 -height 480 -nocursor &
$ valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen
$ ms_print animatedtiles.massif > animatedtiles.out
      
      





Kami melihat konsumsi memori di tumpukan - sekitar 6 MB (hampir dua kali lipat dari pada STM32F746G).



Tetap menyetel ukuran heap yang diinginkan di mods.conf dan membangun kembali. Aplikasi dimulai dengan segera dan tanpa masalah, seperti yang ditunjukkan dalam video singkat ini





Secara tradisional, Anda dapat mereproduksi sendiri hasilnya. Bagaimana melakukan ini dijelaskan di wiki kami .



Artikel ini pertama kali diterbitkan oleh kami dalam bahasa Inggris di embedded.com .



All Articles