Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial Internet of Things >> Tertanam

Menjalankan aplikasi Linux di STM32 MCU

Semakin banyak fungsionalitas yang diharapkan dari sistem tertanam untuk produk pintar. Ini dapat dengan mudah dicapai dengan Linux, yang menawarkan perangkat lunak untuk setiap kasus yang Anda inginkan. Tetapi Linux membutuhkan sumber daya perangkat keras yang agak besar, terutama memori, sehingga platform target biasanya akan agak mahal dan memiliki konsumsi daya yang tinggi. Di sisi lain, mikrokontroler modern (MCU) memiliki banyak sumber daya yang cukup untuk banyak tugas cerdas. Menggunakan sistem operasi waktu nyata (RTOS) seperti Embox RTOS, yang memungkinkan penggunaan perangkat lunak Linux di mana pun termasuk MCU, pengembang dapat lebih mudah mengembangkan perangkat pintar yang lebih murah dan mengonsumsi lebih sedikit daya.

Dalam artikel ini, kami membahas peluncuran aplikasi Qt dasar pada MCU tertanam yang menjalankan Embox RTOS. Kami menggunakan dua papan berbasis Cortex-M7 inti tunggal (216MHz):STM32F746g-Discovery dan STM32F769i-Discovery, yang masing-masing memiliki layar sentuh dengan resolusi layar 480×272 dan 800×480.

Beberapa waktu lalu kami berhasil meluncurkan Qt contoh standar 'moveblocks' di STM32F746-Discovery [Catatan 1]. Namun kami ingin melangkah lebih jauh dan meluncurkan contoh dengan layar sentuh. Kami memilih contoh standar lain, 'animasi ubin'. Ini adalah contoh yang cukup bagus yang terlihat keren bahkan di desktop. Ini interaktif sehingga kita dapat menggunakan layar sentuh dan juga terlihat seperti animasi 3D.

Kami ingin mengetahui apakah STM32 MCU dapat memberikan kinerja yang cukup. Kami tidak yakin apakah kecepatan CPU akan cukup untuk membuat adegan rendering menjadi mulus, karena seperti yang kami temukan, bahkan penyegaran layar untuk tampilan 800x480 adalah operasi yang mahal [Catatan 2].

Bangunan

Pertama-tama, mari kita buat aplikasi kita sebagai bagian dari Embox. Cara paling sederhana untuk melakukannya adalah dengan membangun aplikasi untuk QEMU, yang merupakan emulator open source. Menggunakan QEMU berarti kita tidak perlu mengurus konsumsi memori dalam hal ini. Ini akan membantu kami memastikan bahwa semua komponen yang diperlukan tersedia. Ketika 'animasi' telah dimulai di QEMU, kami dengan mudah menambahkan komponen yang diperlukan ke file konfigurasi untuk STM32.

Peluncuran pertama di papan target

Kami berhasil memulai 'animasi' di papan target kami STM32F746G-Discovery, tetapi kami perhatikan bahwa hanya bagian atas layar yang digambar. Tentu saja, kita dapat mencoba memecahkan masalah melalui debugging segera di papan, tetapi ada cara yang lebih mudah:Kita dapat memulai dan men-debug contoh di lingkungan Linux terlebih dahulu.

Men-debug di host

Untuk menjalankan contoh ini dan men-debug aplikasi Anda, Anda memerlukan pustaka Qt itu sendiri serta QVFB, yang merupakan aplikasi Qt yang menyediakan layar virtual. Anda dapat membangun QVFB seperti yang dijelaskan dalam dokumentasi resmi.

Kemudian Anda dapat meluncurkan QVFB dengan resolusi layar yang diperlukan (480×272 untuk STM32F746G-Discovery):

./qvfb -width 480 -height 272 -nocursor  

Anda juga harus membangun perpustakaan Qt dengan profil yang disematkan, yaitu dengan opsi '-tertanam'. Opsi ini dirancang untuk menjalankan Qt tanpa X11 atau lingkungan grafis yang ada, QWS (Qt Windowing System) akan digunakan sebagai gantinya. Kami juga menonaktifkan beberapa opsi dan modul lain yang tidak perlu. Baris konfigurasi yang dihasilkan adalah sebagai berikut:

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

Akhirnya, mari kita membangun dan memulai 'animasi'. Tahap build seperti biasa untuk Qt (qmake; make; ). Anda harus menentukan QVFB sebagai tampilan saat memulai aplikasi:

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

Kami mendapat gambar yang sama di bagian atas layar. Kami menemukan dalam kode sumber (examples/animation/animatedtiles/main.cpp) bahwa aplikasi dimulai dengan “view->show()”, yang berarti tidak dalam mode layar penuh. Setelah itu, kami sepenuhnya yakin bahwa satu-satunya bagian atas layar yang digunakan untuk menampilkan aplikasi. Kami memodifikasi sedikit kode 'animasi ubin', menambahkan opsi '-layar penuh'.

Meluncurkan di STM32F746-discovery

Kami membangun aplikasi kami yang dimodifikasi di Embox dan memeriksa apakah itu berhasil dijalankan di QEMU. Tetapi ketika kami meluncurkan aplikasi di papan target, kami menerima kesalahan "Memori Habis". Artinya ukuran heap di konfigurasi kita tidak cukup untuk aplikasi. Kami memutuskan untuk menggunakan alat pengembangan yang kaya di Linux untuk memecahkan masalah yaitu memperkirakan ukuran tumpukan yang diperlukan.

Kami telah memulai aplikasi kami dengan valgrind. Valgrind adalah alat untuk debugging dan pembuatan profil memori, Massif adalah profiler heap (ini adalah bagian dari Valgrind).

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

Dan ternyata aplikasi tersebut membutuhkan ukuran heap sekitar 2,7 MB heap size.

Kami mengatur ukuran tumpukan menjadi 3 MB di konfigurasi Embox dan memulai demo kami lagi. Itu berhasil dijalankan dalam mode layar penuh.

Meluncurkan di STM32F769I-Discovery.

Kami juga ingin mencoba contoh di papan serupa tetapi dengan tampilan yang lebih besar. Contoh ini menggunakan STM32F769I-Discovery dengan resolusi layar 800x480. Dalam hal ini, dibutuhkan hampir 1MB hanya untuk framebuffer dalam mode warna 16bit (800x480x2=768000), tetapi ada cukup (16MB) SDRAM eksternal di papan ini. Jadi kita hanya perlu memperkirakan ukuran tumpukan.

Kami memulai QVFb dengan resolusi baru (800×480):

$./qvfb -width 800 -height 480 -nocursor & 

Dan gunakan valgrind seperti waktu sebelumnya:

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

Kami telah menemukan bahwa itu membutuhkan sekitar 6 MB. Kami telah menyiapkan ukuran heap 6 MB dan 'waktu animasi' berhasil diluncurkan di papan STM32F769I.


Gambar 1:Contoh animasi QT pada papan STM32F769I-DISCOVERY di bawah Embox RTOS. (Sumber:Embox)

Anda dapat melihat cara kerjanya dalam video ini (di bawah) dan Anda dapat mereproduksi sendiri hasilnya seperti yang dijelaskan di wiki github kami.

Catatan:

  1. https://habr.com/ru/company/embox/blog/459730/] (dalam bahasa Rusia, tetapi juga tersedia dalam terjemahan bahasa Inggris pihak ketiga:https://sudonull.com/ post/25508-Porting-Qt-to-STM32-Embox-Blog
  2. https://alexkalmuk.medium.com/a-little-about-graphics-subsystem-internals-on-microcontrollers-d952cfd0966a

Anton Bondarev adalah pendiri Embox RTOS. Anton lulus dari Saint Petersburg Electrotechnical University (LETI) pada tahun 2003 dengan gelar master di bidang teknik elektro dan mengikuti program pascasarjana di Saint-Petersburg State University yang berspesialisasi dalam rekayasa perangkat lunak. Dia memiliki lebih dari 20 tahun dalam pemrograman sistem dan tertanam. Alexander Kalmuk adalah salah satu pendiri Embox RTOS. Alexander lulus dari Saint-Petersburg State University pada tahun 2014 dengan gelar master di bidang matematika dan rekayasa perangkat lunak dan mengikuti program pascasarjana di Saint-Petersburg State University yang berspesialisasi dalam teori kontrol. Dia memiliki pengalaman lebih dari 10 tahun dalam pemrograman sistem tertanam.

Konten Terkait:

Untuk lebih banyak Tertanam, berlangganan buletin email mingguan Tertanam.


Tertanam

  1. Panduan Cloud Computing Di Linux
  2. Linux Cloud Hosting Vs Windows Cloud Hosting
  3. Klasifikasi Pewarna Berdasarkan Aplikasi
  4. ST meluncurkan seri mikroprosesor STM32MP1 dengan distribusi Linux
  5. IC manajemen daya mendukung rangkaian prosesor aplikasi
  6. Sensor Telemetri 2.0.1
  7. Java 10 - Berbagi Data Kelas
  8. Apa itu Running Bond?
  9. Clustermanagement di PLCnext?
  10. Aplikasi Java pada Kontrol PLCnext