§ Главный файл

1#include <avr/io.h>
2#include <util/delay.h>
3
4#define BLINK_DELAY_MS 1000
5
6int main (void)
7{
8    /* Установка пина 5 на PORTB как OUTPUT */
9    DDRB |= _BV(DDB5);
10
11    while(1) {
12
13        // Включить пин 5 на высокий уровень (HIGH)
14        PORTB |= _BV(PORTB5);
15
16        // Задержка в миллисекундах
17        _delay_ms(BLINK_DELAY_MS);
18
19        // Выключить (LOW) пин 5, индикатор выключается
20        PORTB &= ~_BV(PORTB5);
21        _delay_ms(BLINK_DELAY_MS);
22    }
23}

§ makefile

1all: main.o
2	avr-gcc -mmcu=atmega328p main.o -o main
3	avr-objcopy -O ihex -R .eeprom main main.hex
4	avr-objdump -d main > main.lst
5
6flash:
7	avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:led.hex
8
9main.o: main.c
10	avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c main.c -o main.o

§ Принципы компиляции

1# Компиляция
2avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o main.o main.c
3
4# Сборка
5avr-gcc -mmcu=atmega328p main.o -o main
6
7# Создание HEX-файла
8avr-objcopy -O ihex -R .eeprom main main.hex
9
10# Загрузка на плату
11avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:main.hex
12
13# Листинг кодов
14avr-objdump -d main > main.lst