STM32 Nucleo F446REを買ったのでオフラインビルドの環境確認を兼ねてmrubyを動かしてみました。
F446REのスペック
| Freq. | Flash | RAM |
|---|---|---|
| 180 [MHz] | 512 [Kb] | 128 [Kb] |
| スイッチサイエンスで1900円。 | ||
| (自分はコンビニ受け取りが便利なのでAmazonで2390円で購入) |
とりあえず環境準備
こちらを参考にさせて頂きました
コマンドラインでArduino開発 : vim + platformio
-
Python 2.7.Xをインストール
僕はWindows用インストーラをUniversal Extractorで展開して.nyagosでPATHを通すスタイル -
setuptoolsをインストール
setuptoolsのページからDLしてきてpython ez_setup.py -
pipをインストール
easy_install pip -
PlatformIOをインストール
pip install platformio -
SConsをインストール
自分の環境ではpipでのインストールが上手く行かなかったのでeasy_installを使いました。
easy_install scons
mbed(STM32 Nucleo)プロジェクトの作成
platform boardsで対応しているボードの一覧が確認できます。
適当にディレクトリ切って
platform init --board nucleo_f446reとコマンドを打つとplatformio.iniとlib/ src/が作られるのでsrc/にソースファイルを追加していきます。
途中で聞かれる選択肢は、とりあえずN yで。
プロジェクト作成の初回にはコンパイラツールチェインのDLが行われるため少し時間がかかります。
コンパイラ等は
%USERPROFILE%/.platformio/packages/toolchain-gccarmnoneeabi
にDLされると思います。次のmrubyのビルドで使用するので
%USERPROFILE%/.platformio/packages/toolchain-gccarmnoneeabi/bin
にPATHを通しておきましょう。
mrubyのビルド
こちらのページを参考にさせて頂き、問題なくビルド完了。
上記ページのサンプル中の
- #include "test.c"
このインクルードは不要、のはず。
ソースコード、ライブラリの準備
ソースコード
上述のページのサンプルをコピペしてsrc/に配置。ファイル名は何でもOK。
mruby関係
プロジェクトディレクトリにscripts/という名前でディレクトリを切り、mrubyのリンクライブラリやインクルードファイルを設置。ディレクトリ名はscripts/でないとダメ。
scripts/以下の構成は自由ですが、今回はこのようにしました。
├─lib
│ readme.txt
│
├─scripts
│ └─mruby
│ ├─include
│ │ │ mrbconf.h
│ │ │ mruby.h
│ │ │
│ │ └─mruby
│ │ array.h
~~~~~~~~~~~~ (省略) ~~~~~~~~~~~~
│ │ version.h
│ │
│ └─lib
│ libmruby.a
│
└─src
main.cpp
test.rb
platformio.iniの修正
mrubyをリンクするためのコンパイルオプションの設定と
upload_protocolを設定しアップロードまで一気にできるようにしておきます。
[env:nucleo_f446re]
platform = ststm32
framework = mbed
board = nucleo_f446re
build_flags = -Imruby/include -Lmruby/lib -lmruby
# targets = upload
upload_protocol = stlink
上記のように設定しても、includeファイルとlibのサーチパスは
勝手にscripts/mruby/include/とscripts/mruby/libとなるようです。
そのためライブラリの設置はscripts/としています。
ビルドしてみる
まずsrc/test.rbのコンパイル
$ mrbc -B bytecode src/test.rb
続いて全体のビルド
$ platformio run
アップロードまで行うなら
$ platformio run --target upload
未解決
rubyスクリプトのコンパイルまでplatformioで一気にやっちゃいたい。
extra_scriptでやろうとしたが、ファイル構成のチェックが先に行われるのか
platformio run1回目リンクエラー
platformio run2回目成功(1回目でコンパイルが済んでいて最初からファイルがあるから?)
となってしまった。何とかならないものか…