2015-05-24 2 views
0

Я хотел бы сделать make-файл для компиляции c-программ для arduino. Я немного знаком с make, но никогда не использовал его с avr-gcc. Каков самый простой способ, которым я мог бы добавить команды ниже в make-файле?Базовый make-файл для arduino с использованием avr-gcc

$ avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o led.o led.c 
$ avr-gcc -mmcu=atmega328p led.o -o led 
$ avr-objcopy -O ihex -R .eeprom led led.hex 
$ avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:led.hex 
+0

Для тех из нас, кто не знаком с avr-gcc, не могли бы вы рассказать нам, что делают третья и четвертая команды? – Beta

+0

третий делает шестнадцатеричный файл для мигания, а четвертый - мигает – connorwstein

+0

, как в письменной форме во флеш-память на mcu – connorwstein

ответ

2

Простодушный как-meataxe способ просто обернуть команды в рецепте:

.PHONY: all 
all: 
    avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o led.o led.c 
    avr-gcc -mmcu=atmega328p led.o -o led 
    avr-objcopy -O ihex -R .eeprom led led.hex 
    avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:led.hex 

Просто введите make, и он будет работать. Это работает, но это просто немой сценарий. Лучший способ, обернув каждую команду в правило, с правильными именами и предпосылках:

# I still don't know what this one does. ("flashing"?) 
.PHONY: flash 
flash: led.hex 
    avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:led.hex 

led.o: led.c 
    avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o led.o led.c 

led: led.o 
    avr-gcc -mmcu=atmega328p led.o -o led 

led.hex: led 
    avr-objcopy -O ihex -R .eeprom led led.hex 

Это предотвратит много ненужной работы, такие как восстановление led и led.o, когда они уже в курсе. Мы можем улучшить его дальше, делая некоторые из этих правил в шаблонных правил, так что в дальнейшем, если вы хотите добавить servo.c в проект вам не придется писать новые версии всего:

# Can other things "flash"? Or be "flashed"? The word has several definitions. 
.PHONY: flash 
flash: led.hex 
    avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:led.hex 

%.o: %.c 
    avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o [email protected] $< 

%: %.o 
    avr-gcc -mmcu=atmega328p $< -o [email protected] 

%.hex: % 
    avr-objcopy -O ihex -R .eeprom $< [email protected] 

Дальнейшие улучшения возможны , но многое зависит от того, как вы собираетесь использовать этот make-файл и в каких направлениях вы намерены расширить проект.

Смежные вопросы