mbedをofflineでコンパイルする

mbedは簡単便利ですが、ネット環境が無いと悲劇になり、また、一つのハードウェア(mbed)に一つのログイン名になるので、複数の人が用いる教育関係ではお金持ち以外使えません。
これをネット環境無しでgccを用いてコンパイル環境を作った人がいますので、そのインストーラーを紹介します。
  1. このzipファイルを解凍します。ここではC:¥MBED¥gccの中にコンパイラを入れることを仮定して説明します。
  2. win_install.cmdを実行する。この時コンパイラーなどをネットからダウンロードするので、パソコンはインターネットにつないでおく必要があります。
  3. BuildShell.cmdを実行するとコマンドプロンプトのコンパイル環境になります。
  4. cd samples\HelloWorld
    makeを実行します。
  5. 問題が無ければHelloWorld.binが作られます。
  6. インストールできない場合、ちょっと古いバージョンですがall in one でこれをC:¥MBED¥gccとなるように解凍すれば使えるはずです。(C:¥MBED¥gcc¥bin)

さらに統合環境(IDE)Code::Blocksでコンパイルできるようにする

上記の場所にコンパイラがあることを仮定しています。
Code::Blocksバージョン10.05以上が必要です
Code::Blocksをインストールします。メニューなどの日本語化はこちら
  1. C:¥Program Files (x86)¥CodeBlocks¥share¥CodeBlocks¥templates¥wizard¥arm¥files
    にmbedフォルダを作り、そこにmakefileを入れます。さらにそのフォルダの中にsrcフォルダを作り、初期ファイル、main.cppを入れます。32bit版windowsの場合は、(x86)は付きません(以下同様)。
  2. C:¥Program Files (x86)¥CodeBlocks¥share¥CodeBlocks¥templates¥wizard¥arm の中のwizard.scriptを上書きする。
    上記1,2のデータファイル
  3. Code::Blocksを起動させ、新規プロジェクトの作成をクリックする。


  4. 左側で「プロジェクト」を選び、「ARM Project」を選択し、GOボタンを押す。


  5. プロジェクトはgccフォルダの中のprogフォルダに作ります。下図のようにprogを選択してください。無ければ新しいフォルダーの作成ボタンを押して作ってください。


  6. プロジェクト名を入れてください。ここではHelloにしました。プロジェクトを作成するフォルダが、間違っていたら訂正してください。


  7. ここは何もすることが無いので次へ。


  8. mbedを選択してください。


  9. メニューの「設定」、「コンパイラとデバッガを選択してください。


  10. コンパイラ設定タブが選ばれているはず。「コンパイラの選択」で「GNU GCC Compiler」と表示されているところを「GNU ARM GCC Compiler」に変更してください。


  11. 「Toolchain実行ファイル」タブで以下のように設定します。
    いずれも、右側の...を押して、C:\MBED\gcc\binの中のものを指定します。



  12. メニューの「プロジェクト」→「プロパティ…」を選択します。
    「プロジェクト設定」タブで、Makefileを自動生成しないにチェックを入れる。



  13. メニューの「プロジェクト」→「ビルドオプション…」を選択します。
    左上のところで、defaultを選択します。

    「"Make"コマンド」タブで、Silent build:のところの$targetを消す。

    プロジェクト/ターゲットのクリーン:のところのclean$targetの$targetを消す。この二つで良いと思いますが、念のため全部の$targetを消しておくと良いかもしれません。



  14. 「ビルド前後のステップ」タブで、ビルド後のステップの部分に、

    cp Program.bin e:

    とします。ここで、Program.binは下のmakefileの項目で設定するもので、デフォールトがこれになっています。e:はMBEDのドライブです。これは、パソコンごとに異なりますので、各自のドライブにしてください。
    「ターゲットがup-to-dateでも、常に実行」のチェックも入れておくと便利かもしれません。(ビルドせずにmbedに単純にコピーするだけの場合など)
    ビルド時にこのcpというコマンドが無いとうエラーがでた場合には、この部分を

    %comspec% /c copy Program.bin e:

    と変更してみてください。



  15. Managementのところにある「その他」の中にmakefileがあります。



    これをクリックすると、何を用いて開くか聞いてきますので、Code::Blocksのエディタで開くとしてください。このmakefile中のPROJECT=Programの部分のProgramのところが出来上がりのファイル名になります。このまま使用するとProgram.binが実行ファイルになります。変更する場合は適当に直してください。(プロジェクト名が良いでしょう。ここでは、Helloのことです。つまり、Hello.bin)

  16. 「ビルド」→「ビルド」でProgram.bin実行ファイルが出来、ファイルを転送します。
    「ビルド」→「現在のファイルをコンパイル」ではProgram.bin実行ファイルを作るだけです。


    あるいは左端のアイコンをクリックしてもコンパイル+転送をします。



  17. 複数のコンパイルされたファイルを消去するには「ビルド」→「クリーン」とします。



  18. 複数のコンパイルされたファイルを消去し、ビルドするには「ビルド」→「再ビルド」とします。



  19. Code::Blocksを終了して再度このプロジェクトを開く場合は、


    をクリックするか、ファイル→最近使ったプロジェクト、で選択してください。


ライブラリへの追加

例えば、LCDをいつも使う場合、ソースファイルとヘッダファイルをいつも入れるのは面倒になります。その時は、TextLCDのコンパイル結果をライブラリに登録すると便利です。
C:\MBED\gcc\external\mbedにはヘッダーファイル。その下のLPC1768フォルダのmbed.arがリンクで用いられるライブラリです。これにTextLCDを加えてみます。
まず、C:\MBED\gcc\external\mbedにTextLCD.hを入れます。また、TextLCD.oはどこかでコンパイルした結果があるとします。これをmbed.arに追加します。
それには、そのフォルダの中で、
ar q mbed.ar TextLCD.o
とします。本当に追加されているか確かめてみます。それには、
ar t mbed.ar
とします。TextLCD.oが一番最後に追加されているはずです。

コンパイラーが指定できない場合

プロジェクトを作るときに次のように出てきて、不可能になってしまいます



これを回避するには、
  1. ファイル名を指定して実行の部分に、「%APPDATA%\codeblocks\UserTemplates」と入れるとフォルダが開きます。
  2. この中に、mbed.zipを解凍したmbedフォルダをフォルダごと入れます。
  3. Code::Blocksを走らせ、新規プロジェクトの作成をクリックします(今までと同じ)。
  4. ここで、プロジェクトを選ばずに左側の「ユーザーテンプレート」を選ぶと下のようにmbedが出てくるのでそれを選択し「Go」を押します。



  5. プロジェクトを作るフォルダを指定し、プロジェクト名を設定すれば出来上がりです。

もう一つのIDE