鳥なき里のマイコン屋(64) Mbed、使われているコンパイラは何?

このところ、またMbedのWeb開発環境に戻って作業しています。大分慣れてきたのですが、ちょっと疑問に思うことがありました。Web開発環境の裏側では「コンパイラ」が動作している筈ですが、それはどのようなコンパイラなのかと。いろいろ見れば、Armの「純正コンパイラ」

Arm Keil

であるようですが、gccのように

gcc –version

などとやってコンパイラのバージョンとか分からないものかと思っていました。まあ、知ったからといって、コンパイラのバージョンにセンシティブなほど本格的な使い方はしていないのでありますが。心の片隅にしまわれた小さな疑問というだけのことです。

Web環境にはコンソールがあるわけでもなし、コマンドラインから制御もできません。余談ですが、コマンドラインのオプションなどを直接制御するメニューなどは見つけていませんが、ことマクロに関しては、外から与えられるようになっています。コンパイルのメニューの中に「コンパイル時マクロ」という

コマンドライン引数の -D オプション

を入力できるメニューがあります。プリプロセッサでコンパイルオプションによりコンパイルされる部分を制御するようなことは、ここを使えばできるようです。

しかし、ドキュメントは読んでみるものです。APIドキュメントを読み進んでいるうちに、気付きました。

Platform > Mbed statistics > System information

と辿っていくうちに、あるではありませんか。

  1. Mbed OS のバージョン
  2. CPUID(ARMに決まっていますが、その中でM0なのかM4なのかなど)
  3. コンパイラのIDとバージョン
  4. ROM/RAMのアドレスとサイズ

を調べることができるAPIが。そして、MbedOSのAPIドキュメントの良い点だと思うのですが、Exampleプログラムとして、

  • 多くの場合、即実行可能であるサンプルが置かれている
  •  “Import into Mbed IDE”ボタンを押せば、自分のWeb環境にインポートされる

という点があります。善は急げ(?)でボタンを押し、全てをコンパイル。セットアップに多少時間かかりましたが、数分後にはNucleo-F401REボード上でサンプルプログラムが動いていました。こんな感じ。

このサンプルプログラム自体を動作させているMbed OSのバージョンが 51105、先頭の5がMbed OS 5 であることは分かるのですが、マイナーな1105部分は不明。何処かOSのリリースノートか何か見れば書いてあるかもしれません。

CPUIDの最上位の41はARMを示し、次の 0 はVariantだというのですが、0なら純正ってことでしょうかね。ここが変わることがあるのかしらん。その次のfは、Mainline Architectureだそうです。他にはBaseline Architectureという定義もあるようですが、どれがどういう位置づけなんだか?その次の

c24

のところは、PartNOでプログラムで確認する場合もあるかも。C24はCortex-M4です。M0ならばc20(名前は似ているが後から出たM0+はc60となる)。最後の1はMinor revision。1はPatch 1ということなので、1回修正入っている?

次のコンパイラIDが疑問だった部分。

ID=1

1ならARM, 2ならgcc, 3ならIARとあります。1のARMはKeilと解釈してよいのでしょうかね。まさかそれ以前のARM純正ということはありますまい。

そうするとコンパイラバージョン5060750は、

  • メジャーバージョン5
  • マイナーバージョン06
  • ビルド0750

ということになります。RAMとROMのサイズはNucleo-F401REの仕様通り。

分かったからといってなんだ、ということもないのでありますが、少しスッキリ。

鳥なき里のマイコン屋(63) NxpマイコンにみるMbed微妙な違い へ戻る

鳥なき里のマイコン屋(65) SW4STM32へExport へ進む