言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Arduino・無イコン時代


ついつい Arduino というマイコンを注文してしまいました。どうせまた LED で遊んで終わりだと思うけど。。。Arduino というのは、マイコン開発キットのちょっとお洒落版のような物で、どのへんがお洒落版かというと、開発環境がすごい簡単らしいです。しかし、注文してからマイコンがやってくるまで待ちきれないので、MacOSXArduino 開発環境の奥深くに眠るシミュレータで遊んでみました。他の 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 */
}
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 自体とはまったく関係ない話でした。