かめら工房

ものを作ったり,写真撮ったり

SW4STM32を使ってmbedをオフラインコンパイルしたい(mbed OS 5編)

どうも皆様お盆をいかがお過ごしでしたでしょうか、かめらちゃんです。

私はTwitterロボコンOB界隈と楽しくキャンプへ行ってきました。楽しかったです。
そこらへんの話は行った私以外の誰かがブログエントリに載せるでしょうから書かないです。

あ、誰も書かなかったら来年度以降用のメモ代わりに書くかも・・・。


前回のエントリでmbed 2.0系のオフラインコンパイルについて書きました。

camerablog.hatenadiary.com

mbedとして使用するには大きな問題は無いんですが、RTOSを含めたシステムを組むとなるとエラーが出てうまく動作させることができないってことで話が終わってたと思います。

mbed OS 5は元々RTOSが搭載された状態なのでコンパイルしようとするとエラーが出て進めない状態な訳です。

今回はそのエラーを消してコンパイル+OpenOCDによる書き込みができたので報告します。

まず、mbedオンラインコンパイラでmbed-osを使ったプログラムを作成します。
今回も使用するマイコンボードはNUCLEO-F746ZGです。
mbed-osを使ったサンプルで最もシンプルなmbed OS Blinky LED HelloWorldを使用します。

f:id:ks7jistra:20170820004816p:plain


元となるプログラムを作成したら、プログラムワークスペースで右クリック→プログラムのエクスポートでExport ToolchainをSW4STM32に設定しExportします。

f:id:ks7jistra:20170820004821p:plain


ダウンロードが完了したらSW4STM32のworkspaceに解凍し、SW4STM32でImportします。

f:id:ks7jistra:20170820005737p:plain


ちなみにこの状態でBuildを実行すると目茶苦茶時間がかかる上にエラー吐くのでおすすめしません。

f:id:ks7jistra:20170820005746p:plain

f:id:ks7jistra:20170820005750p:plain


Project Explorerに表示されたmbed-os-example-blinkyを右クリック→Propertiesを選び、C/C++ Buildの設定をします。

f:id:ks7jistra:20170820005753p:plain

f:id:ks7jistra:20170820005757p:plain


通常状態では Builder SettingsのUse defalut build commandにチェックが入っていますが、
Build commandを編集したいのでチェックを外し、Build commandをmakeから make -jに変更します。

Makefile generationのGenerate Makefiles automaticallyのチェックを外します。

f:id:ks7jistra:20170820005804p:plain



BehaviorタブのWorkbench Build BehaviorのBuild(Incremental build)の中のallを消します。

f:id:ks7jistra:20170820005808p:plain



ここまで設定できればOKボタンを押してPropertiesのウィンドウを閉じて問題ありません。
この状態でビルドボタンを押すと一見ビルドが通ったかの様に見えますが実際は何もビルドされません。
もう一手間加えます。

オンラインコンパイラをもう一度開いて、プログラムワークスペースで右クリック→プログラムのエクスポートでExport ToolchainをEclipse_gcc_armに設定しExportします。
ExportされたzipのBuildフォルダの中にあるMakefileをSW4STM32で読み込んでいるものと置き換えます。

f:id:ks7jistra:20170820005731p:plain


SW4STM32のmakefileはプロジェクトフォルダのDebugフォルダ内にあるのでそれと置き換えます。

f:id:ks7jistra:20170820010213p:plain



置き換えたらSW4STM32内でmakefileを開き、16行目のOBJDIR:= BUILDをOBJDIR:= Debugに変更します。

f:id:ks7jistra:20170820010339p:plain


この状態でビルドを実行するとarm-none-eabiが実行され、.elf,.bin,.hexファイルが生成されます。

f:id:ks7jistra:20170820010610p:plain


自動で書き込みを済ませるためにRun Settingsを開きます。
Ac6 STM32 Debuggingをダブルクリックするとプロジェクトに応じたデバッグ設定が生成されるので、マイコンをPCにつないでRunボタンを押します。

f:id:ks7jistra:20170820010705p:plain


OpenOCDが実行され、マイコンにプログラムが書き込まれ、実行されます。


と、このようにeclipse用のエクスポート設定を無理矢理使ってコンパイルする方法を見いだしました。(Eclipseでやろうとも思ったけれどOpenOCDの設定がうまくいかなかった)

誰がこんなやり方でやるねん感はありますが、STM32をmbed状態でオフラインでRTOSを使いたいという私と似た境遇の方がおられたら使っていただけると幸いです。
なお、今後のアップデートでこんな回りくどい方法をとらなくても良くなる可能性があります。

もっといい方法あるよとかいう方がおられましたらコメントとかTwitterでお知らせいただけると大変ありがたく思います。