STM32でQtを実行しています。パート2。疑似3Dとタッチスクリーンを使用

Emboxプロジェクトでは、 少し前にSTM32プラットフォームでQtを起動し ました例として、moveblocksアプリがあります。これは、画面上を移動する4つの青い正方形のアニメーションです。ボード上でタッチスクリーンを使用できるため、たとえば、インタラクティブ機能を追加するために、さらに多くの機能が必要でした。コンピューターでもかっこいいという理由だけで、animatedtilesアプリを選びました。仮想ボタンを押すことで、多くのアイコンが画面上をスムーズに動き、さまざまな形に集まります。さらに、それは3Dアニメーションのように見え、マイクロコントローラーがそのようなタスクに対処できるかどうかさえ疑問でした。



アセンブリ



まず、組み立てから始めます。これを行う最も簡単な方法は、QEMUエミュレーターを使用することです。そこにはすべてがメモリから正確に収まるため、すべてのコンポーネントがアプリケーションを構築するのに十分であるかどうかを簡単に確認できます。すべてのアニメーションタイルが正常に組み立てられたことを確認した後、必要なボードの構成に簡単に転送しました。



船上での最初のスタート



STM32F746G-Discoveryの画面サイズは480x272で、アプリケーションを起動したとき、画面の上部にのみ描画されていました。私たちは当然、何が問題なのかを知りたいと思っていました。もちろん、ボード上でデバッグを開始することもできますが、より簡単な解決策があります。QVFB仮想フレームバッファーを使用して同じ480x272のサイズでLinux上でアプリケーションを実行します。



Linuxでの起動



Linuxで実行するには、QVFBの3つの部分、Qtライブラリ、およびアプリケーション自体が必要です。



QVFBは、Qtを実行するための仮想画面を提供する通常のアプリケーションです。公式ドキュメントに記載されているとおりに収集し ます



希望の画面サイズで起動します。



./qvfb -width 480 -height 272 -nocursor
      
      





次に、Qtライブラリを埋め込みとしてビルドします。-embeddedオプションを指定します。また、ビルドを高速化するためにさまざまなモジュールを無効にしました。最終的に、構成は次のようになりました。



./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アプリケーション(qmake + make)を作成します。そして、コンパイルされたアプリケーションを起動し、QVFBをポイントします。



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





起動後、Linuxでは画面の一部にしか描画されないことがわかりました。オプション「-fullscreen」を追加して、animatedtilesを少し変更しました。指定すると、アプリケーションはフルスクリーンモードで起動します。



Emboxで起動



Emboxでアプリケーションの変更されたソースコードを使用します。再構築して実行します。アプリケーションが起動せず、Qtのメモリが不足しました。Emboxの構成を見ると、ヒープサイズが2MBに設定されており、明らかに十分ではないことがわかります。繰り返しになりますが、ボード上でこの点を直接理解することを試みることができますが、Linuxで快適にそれを実行しましょう。



これを行うには、次のようにアプリケーションを起動します。



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





animatedtiles.outファイルでは、ヒープ占有率の最大値が約2.7MBであることがわかります。これで、推測する必要はありませんが、Emboxに戻り、ヒープサイズを3MBに設定します。



Animatedtilesがリリースされました。



STM32F769Iで起動-ディスカバリー。



タスクをさらに複雑にして、同じ例を同様のマイクロコントローラーで実行してみましょう。ただし、画面解像度が高い場合のみです-STM32F769I-Discovery(800x480)。つまり、フレームバッファには1.7倍のメモリが必要になります(STM32F746Gの画面は480x272であることに注意してください)が、これはSDRAMの2倍のサイズで補正されます(STM32F746Gで使用可能なSDRAMの8MBに対して16MB)。



上記のようにヒープのサイズを見積もるには、最初にQvfbとLinuxアプリケーションを実行します。



$ ./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
      
      





ヒープ内のメモリ消費量を調べます-約6MB(STM32F746Gのほぼ2倍)。



mods.confで目的のヒープサイズを設定して再構築する必要があります。この短いビデオで示されているように、アプリケーションは問題なくすぐに起動しました





従来、結果は自分で再現できます。これを行う方法は、ウィキに記載されてい ます



この記事は、embedded.com英語で最初に公開さ れました



All Articles