STM32MCUでのLinuxアプリケーションの実行
スマート製品の組み込みシステムには、ますます多くの機能が期待されています。これは、Linuxで簡単に実現できます。Linuxは、必要なすべてのケースに対応するソフトウェアを提供します。ただし、Linuxはかなり大きなハードウェアリソース、特にメモリを必要とするため、ターゲットプラットフォームは通常、かなり高価であり、消費電力が高くなります。一方、最新のマイクロコントローラー(MCU)には、多くのスマートタスクに十分なリソースがたくさんあります。開発者は、MCUを含むあらゆる場所でLinuxソフトウェアを使用できるEmbox RTOSなどのリアルタイムオペレーティングシステム(RTOS)を使用することで、より安価で消費電力の少ないスマートデバイスをより簡単に開発できます。
この記事では、EmboxRTOSを実行している組み込みMCUで基本的なQtアプリケーションを起動する方法について説明します。 2つのシングルコアCortex-M7ベースのボード(216MHz)を使用します。STM32F746g-DiscoveryとSTM32F769i-Discoveryで、それぞれ480×272と800×480の画面解像度のタッチスクリーンを備えています。
少し前に、STM32F746-Discovery [注1]で標準のQtサンプル「moveblocks」を起動することができました。ただし、さらに進んでタッチスクリーンを使用した例を起動したかったのです。別の標準的な例である「animatedtiles」を選択します。これは、デスクトップでもかっこよく見えるかなり良い例です。インタラクティブであるため、タッチスクリーンを使用でき、3Dアニメーションのようにも見えます。
STM32MCUが十分なパフォーマンスを提供できるかどうかを知りたいと思いました。 CPUの速度が、そのレンダリングシーンをスムーズにするのに十分かどうかはわかりませんでした。これは、800×480ディスプレイの画面の更新でさえ、コストのかかる操作であるためです[注2]。
建物
まず、Emboxの一部としてアプリケーションを構築しましょう。これを行う最も簡単な方法は、オープンソースエミュレーターであるQEMU用のアプリケーションをビルドすることです。 QEMUを使用するということは、この場合、メモリ消費を処理する必要がないことを意味します。これは、必要なすべてのコンポーネントが利用可能であることを確認するのに役立ちます。 QEMUで「animatedtiles」が開始されたとき、STM32の構成ファイルに必要なコンポーネントを簡単に追加しました。
ターゲットボードでの最初の起動
ターゲットボードSTM32F746G-Discoveryで「animatedtiles」を正常に開始しましたが、画面の上半分だけが描画されていることに気付きました。もちろん、ボード上ですぐにデバッグすることで問題を解決することもできますが、もっと簡単な方法があります。最初にLinux環境で例を開始してデバッグすることができます。
ホストでのデバッグ
この例を実行してアプリケーションをデバッグするには、Qtライブラリ自体と、仮想画面を提供するQtアプリケーションであるQVFBが必要です。公式ドキュメントの説明に従ってQVFBを構築できます。
次に、必要な画面解像度(STM32F746Gの場合は480×272-検出)でQVFBを起動できます:
./ qvfb -width 480 -height 272 -nocursor
また、埋め込みプロファイル、つまり「埋め込み」オプションを使用してQtライブラリを構築する必要があります。このオプションは、X11または既存のグラフィカル環境なしでQtを実行するように設計されており、代わりにQWS(Qt Windowing System)が使用されます。また、他のいくつかの不要なオプションとモジュールを無効にしました。結果の構成行は次のとおりです。
./ configure -opensource -confirm-license -debug \ -embedded -qt-gfx-qvfb -qvfb \ -no-javascript-jit -no-script -no-scripttools \ -no-qt3support -no -webkit-nomakeデモ-nomakeの例
最後に、「アニメーションタイル」を作成して開始しましょう。ビルド段階は、Qt( qmake; make; )では通常どおりです。 )。アプリケーションを起動するときに、ディスプレイとしてQVFBを指定する必要があります。
./ examples / animation / animatedtiles / animatedtiles -qws -display QVFb:0
画面の上半分にも同じ画像が表示されます。ソースコード(examples / alarm / animatedtiles / main.cpp)で、アプリケーションが「view-> show()」で始まることがわかりました。これは、フルスクリーンモードではないことを意味します。その後、画面の上半分だけがアプリケーションの表示に使用されていると完全に確信しました。 「animatedtiles」のコードを少し変更し、「-fullscreen」オプションを追加しました。
STM32F746での起動-検出
変更したアプリケーションをEmboxでビルドし、QEMUで正常に実行されることを確認しました。しかし、ターゲットボードでアプリケーションを起動すると、「メモリ不足」エラーが発生しました。これは、構成内のヒープのサイズがアプリケーションにとって十分ではないことを意味します。 Linuxで豊富な開発ツールを使用して問題を解決することにしました。つまり、必要なヒープサイズを見積もります。
私たちはvalgrindでアプリケーションを開始しました。 Valgrindはメモリのデバッグとプロファイリングのためのツールであり、Massifはヒーププロファイラーです(Valgrindの一部です)。
$ valgrind --tool =massif --massif-out-file =animatedtiles.massif./examples/animation/animatedtiles/animatedtiles -qws -fullscreen $ ms_printanimatedtiles.massif> animatedtiles.out
そして、アプリケーションには約2.7MBのヒープサイズが必要であることがわかりました。
Embox構成でヒープサイズを3MBに設定し、デモを再開しました。フルスクリーンモードで正常に実行されていました。
STM32F769Iでの起動-検出。
同様のボードで、より大きなディスプレイを使用して例を試してみたかったのです。この例では、800×480のディスプレイ解像度のSTM32F769I-Discoveryを使用しました。この場合、16ビットカラーモード(800x480x2 =768000)のフレームバッファにのみほぼ1MBが必要ですが、このボードには十分な(16MB)外部SDRAMがあります。したがって、ヒープのサイズを見積もるだけで済みます。
新しい解像度(800×480)でQVFbを開始しました:
$ ./ qvfb -width 800 -height 480 -nocursor&
そして、前回と同じようにvalgrindを使用します:
$ valgrind --tool =massif --massif-out-file =animatedtiles.massif./examples/animation/animatedtiles/animatedtiles -qws -fullscreen $ ms_printanimatedtiles.massif> animatedtiles.out
約6MBが必要であることがわかりました。 6 MBのヒープサイズを設定し、STM32F769Iボードで「animatedtimes」を正常に起動しました。
図1:STM32F769IのQTアニメーションタイルの例-EmboxRTOSの下のDISCOVERYボード。 (出典:Embox)
このビデオ(下記)でどのように機能するかを確認でき、githubwikiで説明されているように結果を自分で再現できます。
注:
- 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
>


>
関連コンテンツ:
- 重要なアプリケーションでLinuxを使用する:油と水を混ぜるようなものですか?
- IoTプロジェクトにYoctoプロジェクトを使用する理由
- Automotive GradeLinuxの専門知識の必要性を予測する
- MCUはLinuxを産業用IoTに対応させます
- オープンソースプラットフォームは、組み込みLinuxを備えたIoTを対象としています
- 組み込みLinuxデバイスドライバー:それらの役割を理解する
- 組み込みLinuxのOTAアップデート、パート1 –基本と実装
- 3ドルのWiFiデバイスに安全な組み込みWebサーバーをインストールする方法
- 接続されたシステムの終わりのないソフトウェア開発ライフサイクルをマスターする-またはそれはあなたをマスターします
Embeddedの詳細については、Embeddedの週刊メールニュースレターを購読してください。
埋め込み