Stay up to date with the latest marketing, sales and service tips and news.
この記事は The Qt Blog の Qt on Microcontrollers (MCU) を翻訳したものです。
執筆: Mikhail Svetkin, 2018年05月03日
Qt をマイクロコントーラー(MCU)でのソフトウェア開発に使うことができないか、オペレーティングシステムなしに(“bare metail”) Qt を動かすことができないかという声をよく耳にします。本日は、いくつかの動作デモをお見せしながらこれらの質問に回答したいと思います。
MCU とは単一の集積回路で動作する小さなコンピューターです。性能は劣りますが、システムオンチップ(SoC) とよく似ています。マイクロコントローラーは、車のエンジン制御や埋め込み型の医療機器、ウェアブル、リモコン、OA機器、家電、工具類、おもちゃやその他の組み込みシステムのような自動制御機器でよく利用されています。MCU を採用する利点はサイズの小ささと特にボリュームの大きい製品ではコストがとても低いことです。
MCU はその定義が示すように、サイズが小さく、消費電力が低く、単価が安いという特徴があります。というわけで、MCU を採用する一番の理由は、コストの削減ということが言えるでしょう。
スペックの低さはソフトウェア開発の選択肢に制限をもたらします。GUI が伴う場合はそれが顕著で、ファームウェアのサイズやランタイムのメモリ消費量、GUI の美しさなどの問題が起こりえます。
MCU 向けの GUI の解は現在はありません。もちろん、特定の MCU 向けの特定の問題に対するソリューションはいくつかありますが、まだまだ不十分です。また、そういうライブラリが「クロスプラットフォーム的に」なっている事は稀(現実にはない)です。
いくつかの有料のツールキットは良くできていますが、ほとんどがソースコードが公開されていません。つまり、みなさんは「ブラックボックス」を購入することで、ベンダーロックのリスクを抱えます。
ここで、Qt が使えたらどれほど素晴らしいか想像してみましょう。クロスプラットフォームの(GUI を含む)豊富なクラスライブラリで、素晴らしいドキュメントやサンプルも揃っていて、素晴らしいオープンソースのコミュニティも存在します。
残念ながら現時点では前述のハードウェアの制限により、組み込みでの Qt(Qt for Device Creation) が 公式に対応しているもの は Cortex-A 相当で、Linux や商用の RTOS(INTEGRITY や QNX、VxWorks) のみとなっています。
しかし、この状況は変わりつつあります。
まず自分たちで手を動かして、MCU で Qt を動かすための可能性を探ってみます。
12 Mhz CPU と 128 byte RAM のような MCU を想像して夢を膨らませないよう、ここで対象としているマイクロコントローラーを明確にしておきます。以下の Qt の 現在のハードウェアの制限 とは大きなギャップがあるでしょう。
これらは明らかに、小さなフットプリントしか持たないマイクロコントローラーのレベルではありません。
今回のリサーチに選んだボードは以下のとおりです:
STM32F469 - ARM Cortex-M4, 単精度の浮動小数点ユニット
STM32F746 - ARM Cortex-M7, 単精度の浮動小数点ユニット, L1 キャッシュ(データ/インストラクション)
STM32F769 - ARM Cortex-M7, 倍精度の浮動小数点ユニット, L1 キャッシュ(データ/インストラクション)
スペックのとおり、これらのハードウェアのリソースは Qt が「公式に」要求しているものよりはとても低いものです。
OpenGL については、CPU での描画を提供する Qt Quick 2D Renderer により、現在では厳密には要求ではなくなっています。
私たちは以下の Qt のモジュールのポーティングからはじめました:
Qt を異なるプラットフォームにポーティングをするにはどうしたらいいでしょう?まずは、Qt が機能するために何が必要かを理解する必要があります。そして、以下の2つが主な必要条件となります。
C++11 の方からはじめましょう。Qt 5.7 以降、強力で最新の C++ のフレームワークを提供するため、C++11 をサポートするプラットフォームが必須となりました。しかし、どう頑張っても C++98 の対応しかできない場合は、Qt 5.6(以前) が選択肢としてはありますが、(Qt Lite と呼ばれる) 新しいビルドの設定ツール が導入されたのが Qt 5.8 ということもあり、Qt を MCU 環境向けに絞りきる作業のハードルはグッとあがるでしょう。
次は POSIX - Portable Operating System Interface です。これが実は Qt が “bare metal” ではそのまま動かないという件の回答となります。Qt の内部では多くの POSIX 関数(pthreads, mmap, fopen, open など)を使用しているため、もし bare metal 上で Qt を動かそうと思ったら、自分でその OS に対応した POSIX の実装をする必要があります。ラッキーなことに、今回のリサーチではこれは問題になりません。
今回は、オープンソースの RTOS の RTEMS を使うことにしました。主な機能は以下のとおり:
Qt の RTEMS へのポーティングは以下のステップで行われます:
Qt 自体の移植は以下の図で示されます:

今回のリサーチのもっとも興味深いところではありますが、すべてのプロセスの詳細(ボードの設定から QPA の開発)はここでは記載しません。今回の記事は、リサーチの紹介であり、ステップバイステップのマニュアルを提供することではありません。このパイロットプロジェクトに興味がある方は、私たちにお知らせください。
今回のリサーチ結果をお見せするため、それぞれのボード向けに3つの異なるデモアプリのファームウェアを作成しました。
[embed]https://www.youtube.com/watch?v=1ySTyBz2F0k[/embed]
[embed]https://youtu.be/aKioZ48KW4M[/embed]
Firmware size: 6.6 MB.
RAM required: 3.4 MB.
ご覧のとおり、Qt Widgets は問題なく動作しています。
[embed]https://youtu.be/Px4_Ut1kwNQ[/embed]
Firmware size: 9 MB.
RAM required: 5 MB.
Qt QML のドラッグ時のアニメーションは、 STM32F4/F746 では若干鈍いですが、時計の針は問題なく動いています。これは JIT コンパイルに対応していないためで、これらの MCU には倍精度の浮動小数点のサポートがありません。しかし、STM32F769 ではこれがサポートされていて、ドラッグが他のボードに比べてとてもスムーズになっています。
3つ目のデモは、シンプルものではなく、面白いものを選ぶことにしました。例えば、我々の e-bike demo です。
[embed]https://youtu.be/UZrlSHZW9A0[/embed]
Firmware size: 13 MB.
RAM required: 10 MB.
このデモはとてもよく動いています。ところで、Qt はクロスプラットフォームなので、(元々 Linux で動作することを想定していた)アプリのコードは一行も変えること無く RTEMS でもコンパイルをすることができました。
今回のリサーチは大成功だったと結論付けることができるでしょう。当然、完璧なソリューションには現時点では程遠いですが、今後改善していく予定です。
現時点での作業項目:
さて、今回のリサーチはいかがでしたか?今回作成した QPA や Qt に対する変更はオープンソース(おそらく GPLv3)と商用のライセンスで公開される予定です。まもなく、ご自身で試す事ができるようになるでしょう。
みなさんの MCU のプラットフォームに Qt を移植しシステムイメージを作成するためのコンサルティングサービスも提供する予定です。今後もさらなる情報を提供していきますのでお楽しみに!
Stay up to date with the latest marketing, sales and service tips and news.
Download the latest release here: www.qt.io/download.
Qt 5.12 was developed with a strong focus on quality and is a long-term-supported (LTS) release that will be supported for 3 years.
Find webinars, use cases, tutorials, videos & more at resources.qt.io
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.
Näytä tämä julkaisu Instagramissa.Henkilön Qt (@theqtcompany) jakama julkaisu