ついつい Arduino というマイコンを注文してしまいました。どうせまた LED で遊んで終わりだと思うけど。。。Arduino というのは、マイコン開発キットのちょっとお洒落版のような物で、どのへんがお洒落版かというと、開発環境がすごい簡単らしいです。しかし、注文してからマイコンがやってくるまで待ちきれないので、MacOSX 用 Arduino 開発環境の奥深くに眠るシミュレータで遊んでみました。他の OS 用にあるかどうかは知りません。
次のソースを使います(main.c で保存)。Arduino では ATmega168 という CPU を使いますが、ここではとりあえず ATmega8 を使っています。
/* main.c */ #include <avr/io.h> int main(void) { int i; DDRD = 1 << 4; /* make the LED pin an output */ for (;;) { for (i = 0; i < 50; i++); PORTD ^= 1 << 4; /* toggle the LED */ } return 0; /* never reached */ }
- http://arduino.cc/en/Main/Software から Arduino ソフトをダウンロードして展開
- 開発環境らしき物が hardware/tools/avr/bin にあるのでパスを通す。
- avr-gcc でコンパイルして avr-objcopy でバイナリを作り、simulavr で実行
PATH=~/Downloads/arduino-0012/hardware/tools/avr/bin/:$PATH # パスを通す。 avr-gcc -Wall -DF_CPU=8000000 -mmcu=atmega8 -o main.elf main.c # コンパイル avr-objcopy -O binary main.elf main.bin # バイナリを作る simulavr -P simulavr-disp -d atmega8 main.bin # シミュレータ実行 avr-objdump -d main.elf # アセンブラを見てみる。
simulavr をよーく見ると IO Registers の PORTD の所が微妙に 00 -> 10 とトグルしています。よーく見ないと分からないです。ここに LED が刺さっていると想像して楽しみます。また、シミュレータでは _delay_ms() のディレイが上手く動きませんでした。以上、Arduino 自体とはまったく関係ない話でした。