1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

avr-gcc と make だけで C/C++ AVR 環境構築 (ATmega328P)

Posted at

はじめに

AVR マイコン開発環境を Windows で統合開発環境で用意するには、いくつか方法があります。

  • Arduino IDE (C/C++ など)
  • Microchip Studio (C/C++, 旧 Atmel Studio)

ただ、どの開発環境も裏側では avr-gcc コンパイラが使われています。そこで、なるべく avr-gcc だけを使った環境を、次の記事を参考に構築してみました。

初心者でも分かりやすいコマンド解説が行われているので、詳細は参考記事をご確認ください。

手順

パッケージインストール

ビルドには 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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?