2012年11月18日日曜日

UbuntuでのAVR開発

AVRマイコンをUbuntu上で開発しよう、という試み。
といっても先駆者が結構たくさんいるので
玉虫色に染まれ!さんの手順をそのまま実行すれば問題なく動作するかも。
http://d.hatena.ne.jp/over80/20090302/1236006771

統合開発環境はありません。曰く、
"「初めに言いますが、いわゆる「統合開発環境」的なものはありません。そういったものが欲しい人は素直にWindowsで開発していた方が幸せでしょう。Linuxでやろうと思う人は「エディタは自分の好きなものを使わせろ!」とか「GUIだといちいちマウスに持ち替えなきゃあかんやろ。CUIでやらせろ!」とか言い出すような人です。"
ということみたいです。
Ubuntuに限らずLinuxを敢えて利用するってことはそれなりの信念があるのでしょう。
もちろん主にコマンドでの操作です。

詳細は続きから。


前置きはこのあたりで、インストールするパッケージ一覧。
gcc-avr
binutils-avr
avr-libc
avrdude

このあたりを入れておけば間違いない(と思う)。
インストールはお決まりの、
sudo apt-get install パッケージ名

です。apt-getの他yumとかrpmとかあるんだっけ(?)


インストールできたら適当なコード(FILENAME.c)を書いて、
avr-gcc -g -O2 -mmcu=atmega88p -DF_CPU=1000000UL -c -o FILENAME.o FILENAME.c
avr-gcc -g -O2 -mmcu=atmega88p -DF_CPU=1000000UL -o FILENAME FILENAME.o

でコンパイル。出てきた実行ファイルを、
avr-objcopy -j .text -j .data -O ihex FILENAME FILENAME.ihex

でihexにしたら書き込む準備は完了。
書き込みは、書き込み機をPCにつないで、
sudo avrdude -c avrispmkII -P usb -p m88p -U flash:w:FILENAME.ihex

で完了できる。

ただし今回はターゲットがATmega88Pで、クロックが1MHz、書き込み機が純正品の仮定です。

何度も打ち込むのは面倒なのでMakefileを書くと、
PROG = FILENAME
MMCU = atmega88p
CPUFREQ = 1000000

PORT = usb
TARGET = m88p
MEMORY = flash
TYPE = w

CC = avr-gcc
OBJCOPY = avr-objcopy
AVRDUDE = avrdude

$(PROG).ihex : $(PROG)
<TAB>$(OBJCOPY) -j .text -j .data -O ihex $< $@

$(PROG) : $(PROG).o
<TAB>$(CC) -g -O2 -mmcu=$(MMCU) $< -o $@

.c.o :
<TAB>$(CC) -g -O2 -mmcu=$(MMCU) -DF_CPU=$(CPUFREQ)UL -c -o $@ $<

write :
<TAB>sudo $(AVRDUDE) -c avrispmkII -P $(PORT) -p $(TARGET) -U $(MEMORY):$(TYPE):$(PROG).ihex #<sudoから一行で>

こんな感じ。あんまり綺麗じゃないかもしれないけど、とりあえず動く。
<TAB>はTABによる字下げに置き換えること。
PROGとMMCUとCPUFREQ、TARGETを書き換えれば大体のチップに書き込める。

このMakefileをFILENAME.cと同じディレクトリに置いて、
make

でコンパイル、
make write

で書き込める。

実際Ubuntuでやってみて思うのが、シミュレータがないからすごく不便だということ。
(あとアセンブラが純正とavr-gcc,avr-asでは互換性無いこと)
やっぱり純正品とATMELはすごい。無償提供だし。
以上。

0 件のコメント:

コメントを投稿