Skript file: /~heha/enas/Convac-Ätzer/Firmware-190517.zip/Makefile

# Makefile für ATmega32U4-Firmware auf Arduino Micro für Convac-Ätzer
P = Convac
D = atmega32u4
F_CPU = 16000000

# Diese Zeile schaltet auf avr-gcc-4.9.2 um (je nach Installation),
# beim Auskommentieren gilt der normale Suchpfad (hier WinAVR-2010)
PATH := c:\programs\WinAVR\gcc492\bin;$(PATH)
# 170623: Größenvergleich
# WinAVR2010	24020	(die derzeitige Quelle setzt auf C++11 und geht nicht mehr mit WinAVR2010 zu übersetzen)
# gcc-4.9.2	22684
# gcc-5.3.0	22782
# gcc-8.1.0

CL = avr-gcc -Wall -Wno-parentheses -Wno-array-bounds -Wno-char-subscripts -Os -mmcu=$D -fshort-enums -Wno-strict-aliasing -D F_CPU=$(F_CPU)
# -D DEBUG
#no-parentheses: Ich weiß selbst wo Klammern nötig sind
#no-array-bounds: Flash-Stringadressen nicht im Flash (0..7FFF)
#no-char-subscripts: Bytes als Array-Indizes sind okay für kleine Arrays

all: $P.elf $P.lst

ArialP12.c: ArialP12.in pfont.awk
	awk -f pfont.awk $< > $@
#Korekte Funktion dieser Zeile erfordert gnu-make-Version 3.6.2

.c.o .S.o: makefile
	$(CL) -c -o $@ $<

# Alle C++-Dateien sind (der Einfachheit halber) von beiden Kopfdateien abhängig
%.o: %.cpp Convac.h Display.h makefile
	$(CL) -std=c++11 -c -o $@ $<

$P.elf: main.o dlgUtil.o dlgDigital.o dlgAnalog.o dlgRezept.o dlgAlarm.o Edit.o ListView.o Display.o Keypad.o Digital.o Analog.o Prozess.o usb.o ArialP12.o Strings.o
	$(CL) -o $@ $^
	avr-size -C --mcu=$D $@

$P.hex: $P.elf
	avr-objcopy -j .text -j .data -O ihex $< $@

$P.lst: $P.elf
	avr-objdump -d -t $< > $@
	avr-strip $<

flash: $P.elf
	uba $<
#	dfu-programmer $D erase --force --suppress-validation
#	dfu-programmer $D flash --force --suppress-validation $<
#	dfu-programmer $D launch

clean:
	rm *.o ArialP12.c

# Bootloader schreiben oder ersetzen:
#
# Ausgeliefert werden Arduinos und Clones mit dem Arduino-Urlader.
# Dieser knabbert 2 KByte vom Flash ab und benötigt ein COM-Port.
# Um ihn zu verwenden musste man 2× Reset drücken und hatte 15 s Zeit zum Flashen. Blöd.
# Der Zugriff erfolgt zumeist mit „avrdude -c avr109 …“
#
# Der minimale Urlader „ubaboot“ passt in 512 Byte und kann alles. Benötigt libusb. Open-Source.
# Die Fuses habe ich so geändert, dass JTAG und Taktteiler per Vorgabe AUS ist, wie beim Arduino.
# USB VID + PID habe ich identisch zum Atmel-Urlader gehalten.
# Dafür habe ich das Python-Brennprogramm für Visual C++ umgeschrieben; es kann ELF-Dateien laden.
#
# Das Original von Atmel ist genauso schnell. Ebenso libusb. Closed-Source.
# Allerdings ist er 4 KByte groß. Die Fuses entsprechen dem Datenblatt.
# Die Datei "ATMega32U4-usbdevice_dfu-1_0_0.hex" stammt von der Microchip-Website.
# Der Zugriff erfolgt mit dem Kommandozeilenprogramm "dfu-programmer.exe" (siehe oben),
# Atmel Flip wäre unzweckmäßig und viel zu plump, geht aber auch.
#
# Um diese Urlader in den Mikrocontroller zu bringen, benötigt man
# als Hardware ein Parallelport, die Speisung des AVR (via USB) sowie den Anschluss von
# MISO, MOSI, SCK, RESET und ggf. GND gemäß STK200.
# Danach ist das Parallelport wieder obsolet.
# Das 64-bittrige giveio ermöglicht die Funktion von avrdude auch unter 64-Bit-Windows.
# Für 32-Bit-Windows sowie Linux entfällt das Laden von giveio. (Es kann auch permanent geladen sein.)
# Achtung: Das Überschreiben des Urladers löscht die programmierte Firmware.
ifeq (1,1)	
L = 0xDE
H = 0xDF
X = 0xC3
Z = 0x2F
dfu: ../ubaboot/ubaboot.hex
else
L = 0x5E
H = 0x99
X = 0xC3
Z = 0x2F
dfu: ATMega32U4-usbdevice_dfu-1_0_0.hex
endif

ifeq (0,1)
#mittels giveio (langsam weil alles von Adresse 0 ab gebrannt wird) — kann im Bluescreen enden
	sc start giveio
	avrdude -p $D -P lpt1 -c pony-stk200 -U f:w:$< -U lfuse:w:$L:m -U hfuse:w:$H:m -U efuse:w:$X:m -U lock:w:$Z:m -E noreset
	sc stop giveio
else
#mittels InpOut32.dll und globalem ExceptionHandler (furchtbar langsam)
	crundll InpOut32,CatchIo avrdude -p $D -P lpt1 -c pony-stk200 -U f:w:$< -U lfuse:w:$L:m -U hfuse:w:$H:m -U efuse:w:$X:m -U lock:w:$Z:m -E noreset
endif

zip: Firmware.zip
Detected encoding: UTF-80