β版だった「MbedStudio」がいつの間にかV1.3.1になっていたので、本格使用に向けて確認してみました。デバッグが可能なうえArmCompilerが使えるのは魅力的。
’21・04・12追記しました。
’21・04・14追記しました。
’21・07・03追記しました。
MbedStudioをインストールして使ってみる
Mbed OS 5/6対応ボードが対象。デバッグ可能はさらに絞られる。
現時点では全mbedが対応しているわけではなく、デバッグまで対応しているものは18種類(2021/03/29)です。
Cortex-M4Fで一番多用するNucleo-F446REが未対応で、少し残念ですが今後の対応に期待しつつ、手元のNucleo-F401REが対応しているので今回はヨシとします。
adafruitのLCDサンプルで確認したい。
ST7735系のグラフィックLCDを駆動をオフラインで開発したいので、手元のadafruit 1.8″ TFTシールドをNucleo-F401REにつなげてチェックです。arduino用シールドですからNucleoの互換ソケットに直結できます。
<<<ボードのジャンパの理由>>>
STM32の64ピンタイプで三相相補PWNM2系統使うとつかうポートが決まってしまいます。PWM1は以下になります。
- PC_6 PWM2_1 1L
- PA_5 PWM2_1N 1H
- PC_7 PWM2_2 2L
- PB_14 PWM2_2N 2H
- PC_8 PWM2_3 3L
- PB_15 PWM2_3N 3H
このうちPA_5がarduinoピン/D13と重なります。NucleoボードでこのLCDを使いPWMを出したときに、このヘッダピンをカットし他のピンで代用した、というのが理由。
オンラインでOS対応に変更してからインポート
adafruitのLCDデモは、ベアメタルなのでライブラリはmbed.libです。最新Mbed OS仕様にするために、F401REで「mbed-os-exsample-mbed5-blinky」をインポートして、main.cppおよび各ライブラリをコピーしてプロジェクトを新たに作り、コンパイルして動作確認します。
今回のプログラムでは変更が必要なところは、
wait_ms()関数をThisThread::sleep_for()に書き換えるだけで済みました
エクスポートします。形式は「zip Archive(with repositories)」です
MbedStudioでワークスペースに、zipの中身をコピーするのだが・・・
ワークスペースを作り、そこに先のzipの中身をコピーするとMbedStudioでプロジェクトを認識します。ボードも自動認識で、ケーブルを接続するとTarget名の左にマークが現れます。
早速コンパイル・・・と、エラーがでて一歩も進まない。
そこで、MbetStudio上でblinkyから作ることにします。
MbedStudio上でも「mbed-os-example-blinky」を新規作成して、先のフォルダ内のライブラリとmain.cppをコピーしました。
やっとコンパイル開始。adafruitライブラリにもwait_ms()が使われておりエラーを潰していきます。オンライン環境のコンパイラとは微妙に違うようで、ワーニングも残ります。最初はライブラリもコンパイルするため10分以上かかりました。
コンパイル後は自動ロードし無事動作。二回目からは28秒程度。
毎回10分はたまらないので、main.cppだけ小変更して再コンパイル。ロードまで28秒でした。これだとオンラインコンパイル15秒程度+手動でボードへロードするのとあまり変わりませんのでまあまあ使えそうです。
デバッグはどうだ
デバッグのコンパイルも30秒弱で終わりました。初期RUN/STOPは設定で変更できます。
ブレークポイントで止めてみました。ちゃんと止まります。
良い感じです。今回はここまでですが左にデバッグウィンドウがでているのでウォッチやスタックなど通常のデバッグ作業はできそうです。スレッドも表示できそうで、これはちょっと期待です。
「MbedStudio」なんか使えそうな気がする
オンライン環境の財産を使ったとはいえ、インストールして環境の細かい設定(これが一番大変)も特にせず、一時間たらずでボード上でデバッグするところまでこぎつけました。いい感じです。これでサポート数が増えれば文句なしです。
結局今回はMbedオンラインからのインポートはすんなりいきませんでしたが、まだ導入したばかりです。MbedStudioのライブラリや管理機能を使いこなせれば、1からMbedStudioで構築するようになりそうです。初回コンパイル10分以上はちときついですが・・・これも「共通化できる」らしいのでうまく使いこなしてみたいものです。これからもレポートつづけたいと思います。
(2021/04/12追記)インポートはzipファイルではなくMbedのリポジトリから
mbedオンライン環境からインポートするには、zipエクスポートではなくmbedのリポジトリから行うことで一発でできます。とりあえず覚書。
- まず、mbedオンラインで目的のプログラムをコミット。このときインポートしたライブラリがある場合、それもコミットを求められるのでForkしてコミット。
- つぎにprivate(公開したくない場合)でパブリッシュ。ここでアドレスが表示されるので控えておく。このアドレスはmbedオンラインで「My Code」でいつでも参照できる。
- MbedStudioで「インポート」を選択し、URLをペースト
これで、すんなりビルドが通りました。
(2021/04/12追記)インポートすると巨大サイズになるのでダイエット
1.2GBにもなるプログラムサイズ
インポート後や、blinkyから構築すると、そのサイズは1.2GB超える。これではいくらローカルストレージがあってもたまらないので、簡易的にダイエット!。
※以下は非公式の方法につき各自の責任において施行してください。
ターゲット専用に絞り、インポート直後のGitファイルを消す
今回使うNucleo-L432KCに絞ってOSを縮小化します。また、Mbedオンライン環境から引き継がれたであろうGitファイルを削除します。
- 「mbed-os」->「targets」で「TARGET_STM」以外のフォルダを削除。
- さらに「TARGET_STM」の中で「TARGET_STM32L4」以外のフォルダを削除。
- オンライン環境時のGitが不要なら「mbed-os」->「.git」の中をすべて削除。
この操作で1.22GBから174MBまでダイエットでき、ビルドも通ります。
ところで、3.の初期「.git」フォルダはMbedstudioにインポートした時点で558MBと巨大なので削除しましたが、MbedStudioのワークスペースで再度Gitを構成すると当然ですがサイズが増えることになります。ちなみに、mbed-osを全部Gitに含めると初期リポジトリサイズは203MBになりました。
GitファイルはOSを含ませないなど工夫していただくとして、1.22GBから174MBまでは減らすことができました。ちなみにまだ確認してませんが、ライブラリの共有化ができるらしいのでサイズ縮小にも期待です。
(2021/04/14)ライブラリの共有でダイエット
Mbedオンラインのリポジトリからプログラムをインポートする際に、「Mbed OS Location」のチェックを「Link to an existing shared Mbed OS instance」に変更し、ライブラリフォルダをセットしてインポートすると共有化ができる。
ライブラリソースに手を入れない場合は、これでOKです。インポート直後はプログラムサイズは20MB以下、一旦ビルドするとBUILDフォルダにオブジェクトが貯まり、最終的には60MB程度でした。
共通ライブラリとするには、専用ターゲット用にダイエットするのはやめたほうが良いかもしれません。
(2021/07/03)ダイエットし過ぎにご注意!
ダイエットと称しMbedのプラットホームライブラリで「TARGET_STM」の中の「TARGET_STM32L4」以外のフォルダまで削除したためNucleo間の変更ができなくなってしまいました。
具体的にはNucleo-L432KCからNucleo-F446REへのチェンジです。
そこで「TARGET_STM32F4」を元に戻して解決。MbedStudio上でも変更が可能になりました。
プラットホームをチェンジする可能性があるときはむやみにダイエットしてはいけませんね
ダイエットはFIXしてから行うことにします。