5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PlatformIOでmbedをオフラインビルドしSTM32 Nucleoボードでmrubyを使う

Posted at

STM32 Nucleo F446REを買ったのでオフラインビルドの環境確認を兼ねてmrubyを動かしてみました。

F446REのスペック

Freq. Flash RAM
180 [MHz] 512 [Kb] 128 [Kb]
スイッチサイエンスで1900円。
(自分はコンビニ受け取りが便利なのでAmazonで2390円で購入)

とりあえず環境準備

こちらを参考にさせて頂きました
コマンドラインでArduino開発 : vim + platformio

  1. Python 2.7.Xをインストール
    僕はWindows用インストーラをUniversal Extractorで展開して.nyagosでPATHを通すスタイル

  2. setuptoolsをインストール
    setuptoolsのページからDLしてきてpython ez_setup.py

  3. pipをインストール
    easy_install pip

  4. PlatformIOをインストール
    pip install platformio

  5. SConsをインストール
    自分の環境ではpipでのインストールが上手く行かなかったのでeasy_installを使いました。
    easy_install scons

mbed(STM32 Nucleo)プロジェクトの作成

platform boardsで対応しているボードの一覧が確認できます。
適当にディレクトリ切って
platform init --board nucleo_f446reとコマンドを打つとplatformio.inilib/ 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を設定しアップロードまで一気にできるようにしておきます。

platformio.ini
[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回目でコンパイルが済んでいて最初からファイルがあるから?)
となってしまった。何とかならないものか…

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?