mbedに入門してローカルビルドしてみたので、メモ。
開梱〜Lチカまで
mbedを始めましょう!のページを見れば解決するので省略。
ローカルビルド環境を作る
基本的にmbedはオンラインコンパライラを使い、バイナリがサーバーから降ってくるという形で開発を進めます。なので、現場でトラブルが起こり、かつネット接続ができない場合などは切腹するしかないので、ローカルビルド環境をHomebrewでサクっと作ろうと思います。
HomebrewでGCC-ARM ToolChainを入れる
今回はGCCでビルドすることにして、下記Formulaを入れます。
% brew tap nitsky/stm32
% brew install arm-none-eabi-gcc
mbed SDKをクローンしてくる
とりあえずhomeでやります。このリポジトリをクローンします。
% cd ~
% git clone https://github.com/mbedmicro/mbed.git
各種プラットフォーム用ライブラリをビルドする
mbed SDKでは、自分の使用するmbed用ライブラリを事前にビルドする必要があります。
まずはクローンしてきたSDKにユーザ設定ファイルを追加。
% cd mbed
% touch workspace_tools/private_settings.py
このコマンドで、対応しているプラットフォーム+αを確認できます。
% python workspace_tools/build.py -h
例えば、LPC1768のライブラリを作成する場合はこんな感じ。
% python workspace_tools/build.py -m LPC1768 -t GCC_ARM
これでバイナリを作成する環境が整ったので、次はテストプログラムをビルドしてみます。
サンプルプログラムのビルド
まずは、SDKに同梱されているサンプルプログラムのリストを表示してみます。
% python workspace_tools/make.py -L
[ 0] MBED_A1: Basic
[ 1] MBED_A2: Semihost file system
[ 2] MBED_A3: C++ STL
[ 3] MBED_A4: I2C TMP102
[ 4] MBED_A5: DigitalIn DigitalOut
[ 5] MBED_A6: DigitalInOut
[ 6] MBED_A7: InterruptIn
[ 7] MBED_A8: Analog
[ 8] MBED_A9: Serial Echo at 115200
[ 9] MBED_A10: PortOut PortIn
[ 10] MBED_A11: PortInOut
.
.
このような形で120個くらいのサンプルプログラムが羅列されます。
次のようなオプションを指定して、0番目のBasic
をビルド。
-
-m
ターゲット = LPC1768 -
-t
ビルド環境 = GCC_ARM -
-p
ソースコード = 0 (番号で指定) -
-d
binの生成ディレクトリ =~/mbed/bin
% mkdir ~/mbed/bin
% python workspace_tools/make.py -m LPC1768 -t GCC_ARM -p 0 -d ~/mbed/bin
これで、指定した~/mbed/bin
にbasic.bin
が生成されるはず。
あとはいつもどおり、このbasic.bin
をmbedに書き込み、リセットをかませばOKです。
自分のプロジェクトのビルド
最後に、自分のプロジェクトをオンラインコンパイラからエクスポートしてきて、ビルドします。この場合、プロジェクト内にターゲットのライブラリが同梱されているので、GCCのToolchainさえ入っていれば、上記のライブラリのビルドはしなくてもOKなんだろうな、たぶん(未確認)。
- mbed Compiler を開く
- Program WorkSpace (左のプロジェクトツリー) の所望のプロジェクトを右クリック
- Export Program
- ターゲットとToolchainを選択してExport
ダウンロードされたプロジェクトを解凍し、任意の場所に置く。そして、
% cd your_project_path
% make
これでOK。your_project_path
直下にyour_project.hex
が生成されます。
注意:Yosemiteではbinを書き込めないターゲットあり
こちらのフォーラムにある通り、現時点では、Yosemiteでmbedにプログラムを書き込めません。これに対処すべく、こちらで対策スクリプトを書いてくださっています。ありがとうございます!
最近は、別の解決方法も提案されているようです。daemonを走らせて、通常通りmbedにドラッグ&ドロップ出来るようにする方法のようです(未確認)。
一度やってしまったのでメモ。mbedをつないでいないときにmbed-on-Yosemite.appを使ってしまうと、 /Volumes/MBED
なるファイルができてしまい、mbedをつないでもプログラムが書き込めなくなる。/Volumes/MBED
を消せば元通り書けるようになります。
@tedd_okano さんが修正版を作成してくれております。ありがとうございます!
ちなみに
Google先生に聞くと、gcc-arm toolchainは下記のリポジトリがたくさん出てきます。
% brew tap darconeous/embedded
% brew install arm-none-eabi-gcc
しかしながら、2014/12/11時点では、このformulaではビルドがうまくいかない…。
[ERROR] arm-none-eabi-gcc: error: nano.specs: No such file or directory
どうやらこれはUbuntu版のものらしく、かつ、そいつにバグがあるとか。
gcc-4.8.2以降でこうなってしまった、とのこと。
上記リポジトリで参照しているToolChainのバージョンを4.7.4〜4.9.0まで試してみましたが、ダメでした。ググりすぎて参考ページをメモしていないので、詳細は省きます。