鳥なき里のマイコン屋(78) VS Code+PlatformIO、弱点もある

JosephHalfmoon
JosephHalfmoon

ハタと思い至りました。VS CodeとPlatformIO、便利便利などと囃していると、一方的に過ぎるな、と。実際に使ってみていると、残念な点が無い分けじゃないのです。ショウガナイ、といえばショウガナイのだろうけれど、そういう点もちゃんと投稿しておかないとイケませぬな。今回は、PlatformIOでプラットフォームにMbedを選択した場合について、Arm純正のMbed環境と比べたときに残念な点を書き留めます。

まず、最大の点はコンパイラでしょうか。Arm純正のMbed OS用開発環境のうち、以下の二つはKeil(Arm純正コンパイラ)が無償で使えるのです。

  • Web上のMbed Compiler
  • ローカルなMbed Studio

正直、太っ腹です。Keilコンパイラ製品に設定されている無償のお試し版は容量制限がきつくて、Mbed OS環境だとLチカやるのがせいぜいかもしれません。しかし、上記のArm純正環境であれば、そのような制限のないKeilコンパイラが使えます。PlatformIOでMbed用にデフォルトインストールされるのはgccです。何かとお世話になっているgccは世のスタンダードというべきコンパイラで常に進化をつづけています。しかし、こと組み込み用のArmコア向け(あと多分8051向け)ではKeilコンパイラに一日の長があるんじゃないかと思います。あとちょっとコードサイズが小さければ、と思ったときにKeilだと収まるかも。これは大きい。ちょっとでも小さいROMサイズのMCUが好まれるマイコン業界です。MCUコストで10円も違ったら大変なので。もちろん、有償でKeilのIDEからフルセットを入れて、Mbed環境をセットアップしても良いのですが。

蛇足ですが、Mbed Studio、雰囲気が限りなくVS Codeに似ていませんか。もしかして、VS Codeと根っ子は一緒なんでしょうかね。密かな疑問。ただし、IDEとしては、いろいろなMCU、いろいろなプラットフォームに対応するVS Code+PlatformIOに対して、ArmコアのMCUで、Mbed OSプラットフォーム専用のMbed Studio、向いている方角はまったく違うようです。

2番目のポイントは、環境のセットアップとビルドの速度でしょうか。Web開発環境のArm純正Mbed Compilerであれば、何もインストールせず、ただブラウザを開くだけで、即コードを書き始められます。そしてビルドも速い。かなりな容量がある筈のMbed OSのライブラリや、ボード固有のドライバなどは、全てサーバ側に置かれていて必要に応じてリンクされているようです。

それに比べると、VS Code+PlatformIOの場合、Arm搭載ボードを指定して、Mbed OS環境を最初に指定した時、ツールチェーン(gcc)から、Mbed OSやらボード固有のドライバやら、かなりな分量のファイルをダウンロードしてきてインストールが行われます。どこのサイトのどのファイルを持ってきたらよいのか、すべてPlatformIO内で管理してくれているのはこのツールの偉大なところなのですが、時間そのものはかかります。流石に2回目以降は大分速くなりますが、やはりローカルに大量なファイルを持っているのでエディタとは言え起動に大分時間がかかります。まあ、その辺は、Mbed StudioなどのローカルなIDEは似たり寄ったりです。Arm純正のWeb開発環境が突出して軽いということでしょう。

第3としては、Arm純正のWeb開発環境とMbedプラットフォームの挙動がちょっと違うことがある、という点でしょうか。違うといってもアプリ開発上はほとんど問題にならないような部分です。例えば、以下のようなプラットフォームのOSバージョンやコンパイラのバージョンを知るためのコード。

これをVS Code+PlatformIOでNucleo F401RE用にビルドして、実行してみたら、以下のようにうまく動作しませんでした。どうも

MBED_SYS_STATS_ENABLED

というマクロの定義が必要みたいだったので、追加してみたりしたのですが、思ったような動作をしませんでした。もしかすると定義の仕方に何か問題があるのかもしれません。

同じコードをArm純正のWeb開発環境、Mbed Compilerへ持っていき、ビルドしてみたところ、以下のように動作しました。

予想通りの動作です。この数字の解釈についてはこちらの回で書いているのでご参照ください。なお、Compiler ID: 1はKeilコンパイラです。

ちょっと、プラットフォームの方にある部分に触ろうとすると「完全に同じ」になりきれない部分があるように思われます。ツールチェーンの違いかもしれません。その辺の差異を分かっていればよいのでしょうが、今のところ勉強中にて。

一長一短ある、と。そんな結論で済ますのかい、今回は。

鳥なき里のマイコン屋(78) VS CodeでMicro:bit、デバッガも使えます へ戻る

鳥なき里のマイコン屋(79) VS CodeでRaspberry Pi へ進む