Embox RTOSでSTM32 MCU上にQtを導入: 実践的パフォーマンス検証
組み込みシステムには、より豊富な機能の提供が求められるようになっています。Linuxは膨大なライブラリとツールのエコシステムを提供しますが、特にメモリ面でのハードウェア要件がコストと消費電力を押し上げる原因となります。STM32シリーズのような最新のマイクロコントローラ(MCU)は、多くのスマートアプリケーションに十分なリソースを備えながら、低コストかつ省電力で動作します。
背景
以前、STM32F746-Discoveryボード上でQtの「moveblocks」例を動作させました。今回は、インタラクティブな3D風グラフィックスを備え、タッチスクリーンに適した「animatedtiles」例に拡張します。MCUのCPUとメモリが、480×272または800×480のディスプレイで滑らかなレンダリングを維持できるかを評価しました。
アプリケーションのビルド
まず、オープンソースエミュレータであるQEMU向けにQtの例をビルドします。QEMUでアプリケーションを実行すると、メモリを事前に割り当てる必要がなく、すべての依存関係が揃っていることを確認できます。検証後、STM32の設定ファイルに必要なコンポーネントを追加します。
ターゲットボードでの初回起動
アプリケーションはSTM32F746G-Discoveryで起動しますが、画面の上半分しか表示されません。ボード上で直接デバッグすることも可能ですが、ホスト環境を使った初期デバッグの方が効率的です。
ホストでのデバッグ
例を実行・デバッグするには、QtライブラリとQVFB(Qt Virtual Framebuffer)をインストールします。QVFBはQtが描画できる仮想ディスプレイを提供します。公式手順に従ってQVFBをビルドしてください。
ボードの解像度でQVFBを起動:
./qvfb -width 480 -height 272 -nocursor
組み込みプロファイル(X11なし)でQtをコンパイルし、不要なモジュールを無効化:
./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
animatedtilesをQVFBでビルド・起動:
./examples/animation/animatedtiles/animatedtiles -qws -display QVFb:0
再び画面の上半分しか占有しません。examples/animation/animatedtiles/main.cppを調べると、ビューがウィンドウモードで表示されていることがわかります。-fullscreenフラグを追加することで解決します。
STM32F746-Discoveryへの導入
ソースを修正後、Embox向けにアプリケーションをリビルドし、QEMUで実行します。実機ボードで起動すると「Out Of Memory」エラーが発生し、ヒープが不足しています。必要なサイズを特定するため、ValgrindのMassifツールを使用します。
valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen ms_print animatedtiles.massif > animatedtiles.out
Massifは約2.7 MBのヒープ要件を報告しました。Embox設定でヒープを3 MBに増やすと、フルスクリーンでデモが動作します。
STM32F769I-Discoveryへの導入
STM32F769I-Discoveryは800×480ディスプレイと16 MBの外部SDRAMを備えます。フレームバッファだけで約0.8 MB(800×480×2バイト)を消費します。ヒープサイズの調整のみが必要です。
より大きな解像度でQVFBを起動:
./qvfb -width 800 -height 480 -nocursor &
再度Massifを実行:
valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen ms_print animatedtiles.massif > animatedtiles.out
Massifは約6 MBのヒープを報告。ヒープを6 MBに設定することで、STM32F769Iボードでフルスクリーン動作が可能になりました。

以下のビデオでデモをご覧いただくか、GitHubウィキの手順に従って結果を再現してください。
参考資料
- https://habr.com/ru/company/embox/blog/459730/(ロシア語、英語版: 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氏はEmbox RTOSの創設者です。2003年にサンクトペテルブルク電気工科大学(LETI)で電気工学の修士号を取得し、後にサンクトペテルブルク国立大学でソフトウェア工学の博士課程を修了。組み込みおよびシステムプログラミングにおいて20年以上の経験を持ち、Emboxプロジェクトを主導しています。
Alexander Kalmuk氏はEmbox RTOSの共同創設者です。2014年にサンクトペテルブルク国立大学で数学とソフトウェア工学の修士号を取得し、制御理論の博士課程を履修。10年以上の組み込みシステムプログラミング経験を持ち、Emboxの開発に重要な貢献をしています。
関連コンテンツ
- クリティカルアプリケーションでのLinux利用: 水と油のようなもの?
- IoTプロジェクトでYocto Projectを選ぶ理由
- Automotive Grade Linuxの専門知識の必要性を予測する
- MCUが産業用IoTでLinuxを実現
- オープンソースプラットフォームが組み込みLinuxでIoTをターゲットに
- 組み込みLinuxデバイスドライバ: その役割を理解する
- 組み込みLinux向けOTAアップデート、パート1: 基礎と実装
- 3ドルWiFiデバイスにセキュアな組み込みWebサーバをインストールする方法
- 接続システムの終わりなきソフトウェア開発ライフサイクルをマスターする、さもなくばそれに支配される
さらに組み込み情報を得るには、Embeddedの週刊メールニュースレターを購読してください。
埋め込み
- Sensor Telemetry 2.0.1:Azure IoT Hubによる高度な温度監視
- PLCnextでのクラスタ管理:産業オートメーションにおけるKubernetesの活用
- JlinkでPLCnext Control上のJava 9アプリを最適化
- ランニングボンド(縦目地通し積み)の理解:レンガ積みの基本技法
- ST、STM32MP1発表:デュアルコアArm Cortex MP1、OpenSTLinuxと低消費電力性能搭載
- ROHM、NXP i.MX 8M Nanoプロセッサ向けPMIC「BD71850MWV」を発表
- なぜLinuxがクラウドを支えるのか:包括ガイド
- Linuxクラウドホスティング vs Windowsクラウドホスティング:あなたのビジネスに最適なのは?
- 歯科医療におけるニオブ:インプラントから放射線遮蔽まで
- Java 10のアプリケーションクラスデータ共有(AppCDS)で起動高速化
- 用途別染料分類:反応染料から分散染料まで——業界概観