SW4STM32を使ってmbedをオフラインコンパイルしたい(mbed OS 5編)
どうも皆様お盆をいかがお過ごしでしたでしょうか、かめらちゃんです。
私はTwitterロボコンOB界隈と楽しくキャンプへ行ってきました。楽しかったです。
そこらへんの話は行った私以外の誰かがブログエントリに載せるでしょうから書かないです。
あ、誰も書かなかったら来年度以降用のメモ代わりに書くかも・・・。
前回のエントリでmbed 2.0系のオフラインコンパイルについて書きました。
mbedとして使用するには大きな問題は無いんですが、RTOSを含めたシステムを組むとなるとエラーが出てうまく動作させることができないってことで話が終わってたと思います。
mbed OS 5は元々RTOSが搭載された状態なのでコンパイルしようとするとエラーが出て進めない状態な訳です。
今回はそのエラーを消してコンパイル+OpenOCDによる書き込みができたので報告します。
まず、mbedオンラインコンパイラでmbed-osを使ったプログラムを作成します。
今回も使用するマイコンボードはNUCLEO-F746ZGです。
mbed-osを使ったサンプルで最もシンプルなmbed OS Blinky LED HelloWorldを使用します。
元となるプログラムを作成したら、プログラムワークスペースで右クリック→プログラムのエクスポートでExport ToolchainをSW4STM32に設定しExportします。
ダウンロードが完了したらSW4STM32のworkspaceに解凍し、SW4STM32でImportします。
ちなみにこの状態でBuildを実行すると目茶苦茶時間がかかる上にエラー吐くのでおすすめしません。
Project Explorerに表示されたmbed-os-example-blinkyを右クリック→Propertiesを選び、C/C++ Buildの設定をします。
通常状態では Builder SettingsのUse defalut build commandにチェックが入っていますが、
Build commandを編集したいのでチェックを外し、Build commandをmakeから make -jに変更します。
Makefile generationのGenerate Makefiles automaticallyのチェックを外します。
BehaviorタブのWorkbench Build BehaviorのBuild(Incremental build)の中のallを消します。
ここまで設定できればOKボタンを押してPropertiesのウィンドウを閉じて問題ありません。
この状態でビルドボタンを押すと一見ビルドが通ったかの様に見えますが実際は何もビルドされません。
もう一手間加えます。
オンラインコンパイラをもう一度開いて、プログラムワークスペースで右クリック→プログラムのエクスポートでExport ToolchainをEclipse_gcc_armに設定しExportします。
ExportされたzipのBuildフォルダの中にあるMakefileをSW4STM32で読み込んでいるものと置き換えます。
SW4STM32のmakefileはプロジェクトフォルダのDebugフォルダ内にあるのでそれと置き換えます。
置き換えたらSW4STM32内でmakefileを開き、16行目のOBJDIR:= BUILDをOBJDIR:= Debugに変更します。
この状態でビルドを実行するとarm-none-eabiが実行され、.elf,.bin,.hexファイルが生成されます。
自動で書き込みを済ませるためにRun Settingsを開きます。
Ac6 STM32 Debuggingをダブルクリックするとプロジェクトに応じたデバッグ設定が生成されるので、マイコンをPCにつないでRunボタンを押します。
OpenOCDが実行され、マイコンにプログラムが書き込まれ、実行されます。
と、このようにeclipse用のエクスポート設定を無理矢理使ってコンパイルする方法を見いだしました。(Eclipseでやろうとも思ったけれどOpenOCDの設定がうまくいかなかった)
誰がこんなやり方でやるねん感はありますが、STM32をmbed状態でオフラインでRTOSを使いたいという私と似た境遇の方がおられたら使っていただけると幸いです。
なお、今後のアップデートでこんな回りくどい方法をとらなくても良くなる可能性があります。
もっといい方法あるよとかいう方がおられましたらコメントとかTwitterでお知らせいただけると大変ありがたく思います。