Skript file: /~heha/mb-iwp/Antriebe/Schrittmotorsteuerung/Firmware.zip/sm1/Makefile

# Makefile für eine 6-Achs-Schrittmotor-Steuerung
# Das Betriebsprogramm besteht aus einer einzigen Quelltextdatei „sm1.cpp“.
# Siehe hierzu: http://www.tu-chemnitz.de/~heha/smc

## General Flags
PROJECT = sm1
DEVICE  = atmega8
CC = avr-gcc.exe -Wall -Os -mno-tablejump -mmcu=$(DEVICE)
#AVRDUDE = avrdude -c pony-stk200 -P lpt1 -p $(DEVICE) -E noreset
AVRDUDE = avrdude -c avr109 -P com1 -b 9600 -p $(DEVICE)

OBJECTS = sm1.o

all: $(PROJECT).hex $(PROJECT).eep $(PROJECT).lst size

.cpp.o:
	$(CC) -c $< -o $@
	
.S.o:
	$(CC) -c $< -o $@
	
$(PROJECT).o: $(PROJECT).cpp makefile

$(PROJECT).elf: $(OBJECTS)
	$(CC) -o $(PROJECT).elf $(OBJECTS)

%.hex: $(PROJECT).elf
	avr-objcopy -j .text -j .data -O ihex $< $@
	
%.eep: $(PROJECT).elf
	avr-objcopy -j .eeprom --change-section-address .eeprom-0x810000 -O ihex $< $@

# Der Flash-Inhalt muss in 7 KByte passen; hinten sind 1 KByte Bootloader.
# Eine Überprüfung erfolgt hier nicht.
size: $(PROJECT).elf
	@avr-size -C --mcu=$(DEVICE) $<

%.lst: $(PROJECT).elf
	avr-nm -n $< > $@
	avr-objdump -d $< >> $@

.PHONY: clean program fuse flash
clean:
	-rm -rf $(OBJECTS) $(PROJECT).elf $(PROJECT).map $(PROJECT).lst

# Alles programmieren (ohne Reset zwischendurch)
program: $(PROJECT).hex $(PROJECT).eep
	$(AVRDUDE) -U flash:w:$(PROJECT).hex:i -U eeprom:w:$(PROJECT).eep:i

# Fuses können nur via SPI (oder HVP) gesetzt werden,
# nicht via AVR109-kompatiblem Bootloader.
# (Die Fuses für den Betrieb des Bootloaders und sm1.elf müssen gleich sein.)
#fuse:
#	$(AVRDUDE) -U hfuse:w:0xC0:m -U lfuse:w:0x9F:m

# Nur Flash brennen, EEPROM behalten
flash: $(PROJECT).hex
	$(AVRDUDE) -U flash:w:$(PROJECT).hex:i

# EEPROM wiederherstellen (bspw. wenn durch LabVIEW-Programm versaut)
eeprom: $(PROJECT).eep
	$(AVRDUDE) -U eeprom:w:$(PROJECT).eep:i
Detected encoding: UTF-80