正直あんまりmakefileの中身とか理解できてないし、fuse bitの書き換えで、AVR何個か死んだし。
これ以上死んでもらうと困る・・・
ということで、makefileが何してるのかとかもちょっとだけ触れてみようと、makefileを使わずに、というか、Xcodeも使わずに、その辺のエディタを使って編集、ターミナルでたたいてbuild的なことをすることにした。
AVR : ATmega168p
CPU : 8MHz(内蔵)
プログラマ : AVR ISP MK2
まず、main.cからオブジェクトファイルを生成。main.oが作られる。
avr-gcc -Os -Wall -DF_CPU=8000000 -mmcu=atmega168p -c main.c -o main.o
次に、オブジェクトファイルmain.oから実行ファイル形式のmain.elfを生成。
avr-gcc -Os -Wall -DF_CPU=8000000 -mmcu=atmega168p -o main.elf main.o
(次に、既にあれば、main.hex ファイルを削除)
rm -f main.hex
次に、main.elfファイルからmain.hexファイルを生成。
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
これで、AVRに書き込むためのファイル(main.hex)を用意できる。
プログラムのサイズを確認する場合は、次のように書く。
avr-size --format=avr --mcu=atmega168p main.elf
ちなみに、CrossPackAVRのmakefileがやってるのと一緒。
次に、書き込み。
AVRとつないでー、なんかその辺は適当に。
つなぎ終わって、電源入れたら、次のように書く。
avrdude -c avrisp2 -P usb -p atmega168p -U flash:w:main.hex:i
これで書き込まれる。今回、内蔵発振子を使って8MHzで駆動させるから、fuse bitも変更しないと行けない。 AVR calculator でググって、サイトでfuse bitを求めて、次のように書く。
avrdude -c avrisp2 -P usb -p atmega168p -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xf9:m
ちなみに、デフォルトでは、プリスケーラが1/8になってて、1MHz駆動になってるらしい。fuse bitの中にそれを解除する所があるから、変更が必要。
これで終了。
ターミナルつかってると、なんかやってる感じでるよね。