2011年8月27日土曜日

アセンブリ assembly language プログラミングトレーナとしての Arduino

標準的な Arduino がオンボードでもっている USB/シリアルインターフェースと stk500 互換のプロトコルを使う Bootloader を,AVR プログラマがわりにして,PCと Arduino をUSBケーブルでつなぎ,アセンブリプログラミング演習をすることをかんがえる.
接続した Arduino 自身にアセンブリで書いたプログラムをアップロードするのであって,他の Arduino やチップのプログラマに使うという記事はよくあるがそれではない.また初心者に Bootloader を書き換えさせるのも避けたい.

AVR Studio についている「純正アセンブラ」 AVR assembler 2 (?) か,その互換フリーアセンブラ avra 1.2.3 を使いたい.
アセンブリプログラムをCのソースに組み込むとか,関数だけを書いて呼び出すのも避けたい.GCC のアセンブラもできれば避けたい.プログラムエリアがまっさらの状態で GCC のランタイムルーチンなどないほうが機械語プログラミングらしいし,記法の特殊さ,関数呼び出し法の学習に時間をとられたくないため.
Bootloader がI/O関係の初期設定をかえるのには注意.UART が ON なのは逆に文字出力として利用した方がいいかもしれない.

Adafruit の Arduino Hack ページに情報があった.
しかし,これではうまく行かなかったので,Arduino IDE にふくまれている avrdude を使うことにした.

/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -p atmega328p -cstk500v1 -P /dev/cu.usbserial-A6008d1U -b 57600 -D -U flash:w:main.hex:i

呼出はこんな具合になるので,スクリプトにするか Makefile が必要だ.これはさすがにうまくいく.
自動リセットも組み込まれているようで楽ちんだ.