工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> 埋め込み

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で説明されているように結果を自分で再現できます。

注:

  1. https://habr.com/ru/company/embox/blog/459730/](ロシア語、ただしサードパーティの英語翻訳でも利用可能: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

> アントンボンダレフ EmboxRTOSの創設者です。アントンは2003年にサンクトペテルブルク電気工学大学(LETI)を卒業し、電気工学の修士号を取得し、ソフトウェア工学を専門とするサンクトペテルブルク州立大学の大学院課程に参加しました。彼は組み込みおよびシステムプログラミングに20年以上携わっています。 アレクサンダーカルムイク EmboxRTOSの共同創設者です。アレクサンダーは、2014年にサンクトペテルブルク州立大学で数学とソフトウェア工学の修士号を取得して卒業し、サンクトペテルブルク州立大学で制御理論を専門とする大学院課程に参加しました。彼は組み込みシステムプログラミングに10年以上携わっています。
>

関連コンテンツ:

Embeddedの詳細については、Embeddedの週刊メールニュースレターを購読してください。


埋め込み

  1. 口腔病学におけるニオブの応用
  2. Linuxでのクラウドコンピューティングのガイド
  3. LinuxクラウドホスティングとWindowsクラウドホスティング
  4. アプリケーションによる染料の分類
  5. STがLinuxディストリビューションでSTM32MP1マイクロプロセッサシリーズを発表
  6. パワーマネジメントICはアプリケーションプロセッサフ​​ァミリをサポートします
  7. センサーテレメトリ2.0.1
  8. Java 10 - クラスデータ共有
  9. Running Bond とは?
  10. PLCnextでのクラスタ管理?
  11. PLCnext ControlのJavaアプリケーション