2012年9月20日木曜日

Eclipse/Mac OS X で ARM Cortex-M4 のコードをコンパイル

STM32F4 Discovery で C/C++ 開発環境をためす.

コンパイラ,リンカ,デバッガ等は
http://cu.rious.org/make/compiling-the-arm-cortex-m4-toolchain-yourself/
のオプションそのままでより新しい binutils-2.22, gcc-4.7.1, newlib-1.20.0, gdb-7.5 でビルド.

ボード組み込みの ST-Link/V2 を使うためのコマンド st-link/flash by jnosky を
http://cu.rious.org/make/stm32f4-discovery-board-examples-on-linux-and-mac-os-x/
にしたがってインストール.libusb-1.0 ほか pkgconfig, automake, autoconf 等が必要なので mac port で入れる.使うのが libusb だけなら Xcode の llvm gcc でも stutil はビルドできた.

make コマンドでのコンパイル,バイナリイメージの作成はできるようになったが,Eclipse の GNU Cross ツールでのマネージドビルドがなかなかうまくいかず苦労する.
理由は
1)ライブラリのディレクトリ構造が単純でなく,USB のコードなどは HOST か Device かでソースコードを選ぶ(同じ構造体でもメンバが入れ替わる)必要があったり,ユーザーコードのヘッダをライブラリのヘッダファイル側からインクルードしたりするので,Makefile を参考にちまちま選ばねばならず,IDE で便利になっていない気が.
2)スタートアップ(ブートストラップ?)用のアセンブラコード stm32f4xx_start.s がアセンブルされず正しいイメージファイルができない.理由は,拡張子が大文字 .S でないと GNU assembler のコードとして認識されないからだった.手動で *.S を登録しようとしても拒否される.しかたないのでファイル名の .s を .S か .asm に変更すると,アセンブルされ動作した.ファイル名の大文字小文字を区別しない OS の関係なのか,バグのようだ.

Makefile を使うのであれば,Eclipse はプログラミング用テキストエディタでしかない...なにも考えずデバッガまで動く IAR の試用版でしばらくやったほうがいい気が...
デバッガを使わないレベルが対象とはいえ Arduino/Arduino IDE の優れている点がよく理解できる.

一方 LPCxpresso ボードと IDE 無償版は,Linux, Mac OS X 対応.
デバッガもそのまま動き,作れるコードサイズもそこそこ大きくいいのだが,C++ はサポートしないしプラグイン等使えないので Eclipse ベースである魅力が半減.
がんばって C++ を使えるようにしたり Arduino 互換を目差したライブラリが作られていたりするようだが,これも Eclipse の設定で結構疲れそう.すでに少なくない自家製 Arduino ライブラリコードを使い回すのがむつかしそう.LPCxpresso は秋月で購入できリーズナブルで Ethernet もトランスコネクタだけでつけられて(LPCxpresso 1769)よかったのだが..

Cortex-M3 だが STBee/STBee-mini は DFU 書き込み(dfu-util).その他 DIP 版 LPC1114 (Cortex-M0)等でおすすめされる USART 書き込みなどは,普通にターミナルの shell 上で make するのとかわらないので,使う必要があるときに使うことにする.

LeafLab Maple はライブラリ,IDE のアップデートが Arduino 0023 相当でとまっている.自家製ライブラリは Arduino 1.0 系で書きなおしているので,今後のアップデートを期待する.

0 件のコメント:

コメントを投稿