Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?