AVRシミュレータ
OSXで、AVRがらみのツールはCrossPackで導入済み。
simavr
simavrをOSXで試したメモ。
git clone git://gitorious.org/simavr/simavr.git brew install libelf
Makefile.commonを修正
AVR_ROOT := "/usr/local/CrossPack-AVR/"
make ./simavr/run_avr tests/atmega88_example.axf
AVR_MMCU_TAG_VCD_TRACE 00c6:00 - UDR0 AVR_MMCU_TAG_VCD_TRACE 00c0:20 - UDRE0 Loaded 1780 .text Loaded 114 .data Loaded 4 .eeprom avr_make_mcu_by_name: AVR 'atmega88' not known ./simavr/run_avr: AVR 'atmega88' not known
ふむ。make clean;make all したら
CONF obj-x86_64-apple-darwin12.3.0/cores.deps WARNING cores/sim_90usb162.c did not compile, check your avr-gcc toolchain
とか出てる。さらにMakefile.common を修正。
AVR_INC := ${AVR_ROOT}/avr/
さっきのWarningは出なくなったけど相変わらず
./simavr/run_avr: AVR 'atmega88' not known
だ。自動生成されるらしいsimavr/sim_core_decl.hがサポートコアなしという設定にしちゃってるようだ。うーん。sim_avr/Makefileでsim_core_decl.hを作ってる部分を下記のように修正。
# decl+="#if CONFIG_$$upper\nextern avr_kind_t $$global;\n#endif\n"; \ # array+="#if CONFIG_$$upper\n\t&$$global,\n#endif\n"; \ decl+="extern avr_kind_t $$global;\n"; \ array+="&$$global,\n"; \
強引だがこれでテストが通った。
レジスタやIOの指定をコード上で行えばVCDでダンプできるのか。対応ペリフェラルはここに書いてある。外部装置とかもコードを書けばできるかんじか。
まずVCDダンプ。
#include "avr_mcu_section.h" AVR_MCU(F_CPU, "atmega88"); _trace_t _mytrace[] _MMCU_ = { { AVR_MCU_VCD_SYMBOL("tick"), .mask = (1 << 0), .what = (void*)&PORTB, }, { AVR_MCU_VCD_SYMBOL("reset_timer"), .mask = (1 << 1), .what = (void*)&PORTB, }, { AVR_MCU_VCD_SYMBOL("OC2A"), .mask = (1 << 3), .what = (void*)&PORTB, }, }; sleep_cpu();
simulavr
あれ、そもそもCrossPackにはsimulavrがついてるのか。 こっちはいきなりelfを食えるようだ。そのほうが良い気がするなあ。あと、仮想的なレジスタを定義してdebug printfもどきを実現してるな。ふむ。ただCrossPackについてるものは0.1.2.7で、最新は1.0.0.0らしいのでそれを入れよう。
./configure --with-bfd=/usr/local/CrossPack-AVR/bfd --with-libiberty=/usr/local/CrossPack-AVR
SWIGがver2系だと怒られる。バージョンチェックが甘いようだ。 http://www.mail-archive.com/simulavr-devel@nongnu.org/msg01304.html にしたがってconfigure.acを修正。bootstrapもうまくいかない。パスの関係で、OSX標準のlibtoolsが使われてしまう。brewで入れたのは/usr/local/bin/glibtool, /usr/local/bin/glibtoolize等なので、/usr/local/bin/libtoolなどにシンボリックリンクを貼る。
./bootstrap ./configure --with-bfd=/usr/local/CrossPack-AVR/bfd --with-libiberty=/usr/local/CrossPack-AVR CXXFLAGS="-O 3 -arch i386 -arch x86_64" make
Undefined symbols for architecture x86_64:
ふむ。CrossPackのライブラリはi386アーキテクチャでビルドされてるせいかリンカに蹴られる。
/configure --with-bfd=/usr/local/CrossPack-AVR/bfd --with-libiberty=/usr/local/CrossPack-AVR CFLAGS="-O 3 -arch i386" CXXFLAGS="-O 3 -arch i386" LDFLAGS="-arch i386" LD_FLAGS="-arch i386" --disable-dependency-tracking
とかかなあ。
うーん。だめだ。ちょっとあきらめ気味。