La version précédente était un peu lourde pour des petits projets. Voici une nouvelle version[1] nettement plus simple, il suffit de renseigner la variable FIRMWARE (le nom du projet), le type de micro-contrôleur (MCU) et la fréquence de l’oscillateur. Cerise sur le gâteau, il fait même le café.
Notes
[1] Compatible avec gmake uniquement
La partie flashage utilise Avrdude. Elle est prévue pour MacOS (Darwin) et FreeBSD avec un adaptateur ISP USB. Il faudra probablement l’adapter à votre environnement (OS et modèle de programmateur).
Les règles disponibles sont:
- all: construit le projet (génération du fichier HEX). C’est la règle par défaut
- coffee: idem + flashe et vérifie la puce, configure les fusibles et nettoie tout en sortant.
- asm: génère un fichier assembleur pour le projet
- bin: génère un fichier binaire pour le projet
- verify: Vérifie le contenu de la cible
- erase: efface le contenu de la cible
- rfuse: lit la valeur des fusibles
- wfuse: configure les fusibles de la cible
- load: charge le fichier HEX dans la cible
- dump: génère un fichier HEX depuis la cible
- clean: nettoyage du projet
- mrproper: nettoyage de printemps
- archive: archivage du projet
# # $Id: Makefile,v 1.3 2011/04/08 12:43:06 luc Exp luc $ # FIRMWARE :=WOPR-V2 MCU :=attiny2313 #HZ :=10000000 HZ :=8000000 # # Valeurs des fusibles LFUSE :=0xce HFUSE :=0xdf # # Vous ne devriez pas avoir besoin de modifier ce qui suit CC :=avr-gcc OBJCOPY :=avr-objcopy CFLAGS :=-Os -D F_CPU=$(HZ) CFLAGS +=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes HEADERS := $(wildcard *.h) SOURCES := $(wildcard *.c) OBJECTS := $(patsubst %.c,%.o,$(SOURCES)) all: $(FIRMWARE).hex coffee: all load verify wfuse mrproper @echo "All is nice. Have a good day." $(FIRMWARE).hex: $(FIRMWARE).out @printf "Generating $(FIRMWARE).hex..." @$(OBJCOPY) -R .eeprom -O ihex $(FIRMWARE).out $(FIRMWARE).hex @echo "done." $(FIRMWARE).out: $(OBJECTS) @printf "Linking $(FIRMWARE)..." @$(CC) $(CFLAGS) -o $(FIRMWARE).out -Wl,-Map,$(FIRMWARE).map $(OBJECTS) @echo "done." .c.o: @printf "Compiling $<..." @$(CC) $(CFLAGS) -Os -c $< -o $@ @echo "done." asm: $(FIRMWARE).out @printf "Generating assembler source file..." @avr-objdump -D -S $(FIRMWARE).out > $(FIRMWARE).s @echo "done." bin: $(FIRMWARE).out @printf "Generating $(FIRMWARE).hex..." @$(OBJCOPY) -R .eeprom -O binary $(FIRMWARE).out $(FIRMWARE).bin @echo "done." # # Configuration du programmateur ISP LOADER=avrdude ifeq ($(shell uname -s), FreeBSD) ISP=-c stk500v2 -P /dev/cuaU0 # Programmateur USB #ISP :=-c stk200 -P /dev/ppi0 # Programmateur CENTRONIX endif ifeq ($(shell uname -s), Darwin) MODEM := $(shell ([-c /dev/tty*usbmodem* ] && ls /dev/tty*usbmodem*)) ISP :=-c stk500v2 -P $(MODEM) endif LOADER :=$(LOADER) -p $(MCU) $(ISP) LOAD :=$(LOADER) -i 5 -U flash:w:$(FIRMWARE).hex DUMP :=$(LOADER) -i 5 -U flash:r:$(FIRMWARE).hex:i VERIFY :=$(LOADER) -i 5 -U flash:v:$(FIRMWARE).hex ERASE :=$(LOADER) -i 5 -e RFUSE :=$(LOADER) -U lfuse:r:low.txt:b -U hfuse:r:high.txt:b WFUSE :=$(LOADER) -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m load: @printf "Loading firmware..." @$(LOAD) > /dev/null 2>&1 @echo "done." dump: @printf "Reading $(MCU) device..." @$(DUMP) > /dev/null 2>&1 @echo "done." verify: @printf "Verify $(MCU) device..." @$(VERIFY) > /dev/null 2>&1 @echo "done." erase: @printf "Erasing $(MCU) device..." @$(ERASE) > /dev/null 2>&1 @echo "done." rfuse: @printf "Reading fuse..." @$(RFUSE) > /dev/null 2>&1 @echo "done." wfuse: @printf "Writing fuse..." @$(WFUSE) > /dev/null 2>&1 @echo "done." # # Nettoyage, Archivage, etc. clean : @printf "Cleaning source tree..." @rm -f *.map *.bin *~ *.out *.gch *.o $(FIRMWARE) $(FIRMWARE).asm @echo "done." mrproper : clean @rm -f *.hex archive: mrproper @tar cvzf ../$(FIRMWARE).tgz ../$(FIRMWARE) #EOF
Sur MacOS, j’utilise la distribution CrossPack AVR d’Objective Development. Du coup, les binaires du compilateur ne sont pas dans le PATH. Il suffit de modifier le makefile comme suit:
ifeq ($(shell uname -s), Darwin) CCPATH :=/usr/local/CrossPack-AVR/bin else CCPATH :=/usr/local/bin endif CC :=$(CCPATH)/avr-gcc OBJCOPY :=$(CCPATH)/avr-objcopy
Lire le blog en entier, tres bon
J’apprécie vraiment le genre de sujets que vous postez ici. Merci pour partager des informations entre nous une grande qui est réellement utile. Bonne journée!