# 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-8 | 0
|