はじめに
AVR マイコン開発環境を Windows で統合開発環境で用意するには、いくつか方法があります。
- Arduino IDE (C/C++ など)
- Microchip Studio (C/C++, 旧 Atmel Studio)
ただ、どの開発環境も裏側では avr-gcc コンパイラが使われています。そこで、なるべく avr-gcc だけを使った環境を、次の記事を参考に構築してみました。
- 玉虫色に染まれ!! over80 - LinuxでAVR開発 (ビルド編)
初心者でも分かりやすいコマンド解説が行われているので、詳細は参考記事をご確認ください。
手順
パッケージインストール
ビルドには avr-gcc コマンドなどが必要になります。
Windows (winget)
winget install -e --id=ZakKemble.avr-gcc
winget install -e --id=GnuWin32.Make
Debian, Ubuntu (apt)
sudo apt install gcc-avr binutils-avr avr-libc make
ファイル準備
次のような内容の main.c を作成します。PB5 (Arduino UNO なら基板上のLED) が点滅するサンプルプログラムです。
クロック周波数は 1MHz を想定しているため、環境に合わせて F_CPU を変更してください。
main.c
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#define BBLED 5
int main(void)
{
DDRB = _BV(BBLED);
for(;;){
PORTB ^= _BV(BBLED);
_delay_ms(500);
}
}
ビルドの自動化に必要な Makefile ファイルを作成します。
Makefile
PROG=main
OBJS=${PROG}.o
MCU=atmega328p
ELF=$(PROG).elf
IHEX=$(PROG).hex
CC=avr-gcc
CFLAGS=-g -O2 -mmcu=$(MCU)
LDFLAGS=-g -O2 -mmcu=$(MCU)
OBJCOPY=avr-objcopy
# OSごとにRMを定義
ifeq ($(OS),Windows_NT)
RM = del /F
else
RM = rm -f
endif
all: $(IHEX)
$(IHEX): $(ELF)
$(OBJCOPY) -j .text -j .data -O ihex $< $@
$(ELF): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS)
# .o を生成するルール
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
-$(RM) $(ELF) $(IHEX) $(OBJS)
.PHONY: all clean
ビルド
以下の手順で .hex ファイルまたは .elf ファイルが生成されるので、マイコンに書き込んで動作を確認できます。
手動
avr-gcc -g -O2 -mmcu=atmega328p -c -o main.o main.c
avr-gcc -g -O2 -mmcu=atmega328p -o main.elf main.o
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
make による自動化
# ビルド
make
# クリーン(ファイル削除)
make clean