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 系で書きなおしているので,今後のアップデートを期待する.

2012年9月9日日曜日

ST-Link w/ Mac OS X

http://cu.rious.org/make/getting-stlink-to-work-on-mac-os-x-with-macports/
に解説がある.ただし pkgconfig, automake, autoconf も port でインストールする必要あり.
sglib というのを使わないよう,長くなっているが make にオプションをつけるのを忘れない.
LIBRARY_PATH=/opt/local/lib C_INCLUDE_PATH=/opt/local/include make CONFIG_USE_LIBSG=0

2012年9月5日水曜日

FXMA108はプルアップ/ダウン不可で I2C には使えない

おかしいなと思ったら,データシート p. 5 に

Pull-up/Pull-down Resistors
Do not use pull-up or pull-down resistors.

とある.やられた.ホールド回路があるのでつけてはいかんと.オープンドレインとしては機能しないということだ. はっきり商品紹介ページにそう書いてくれればいいのに. これは SPI/UART レベル変換用だ.ダメらしい,とかいう記述があるページも見つかった.いや,ホールドされるならはっきりダメである. 似たような FXMA2102 モジュールは I2C 用,プルアップ抵抗は自由につけられます,とある.ピン数が少ないとかいう問題ではなく別用途だ. 普通に 2SK1772 か PCA9306 つかえばよかった.

2012年9月3日月曜日

dfu-util で STBee mini (STM32 CM3) に .hex を書き込む

.sym ファイルの XXXXXXXX R g_pfnVectors と書かれた行のアドレス XXXXXXXX か .lss ファイルの 0 .isr_vector 000001e4 XXXXXXXX ... のアドレスをしらべ,dfu-util --dfu-address の引数に 0x をつけて .bin ファイルを書き込む. .bin ファイルがなければ xxx-objcopy -O binary -I ihex 等で作れる.