From fc45812dfb9636fa783bd16277d84b53b47adee0 Mon Sep 17 00:00:00 2001 From: hugo LAMY Date: Thu, 6 Mar 2025 09:09:07 +0100 Subject: [PATCH] updated makefile --- Makefile | 64 ++++++++++++++++++++++++++++++++++++++++++ README.md | 5 ++++ module00/ex00/Makefile | 51 +-------------------------------- module00/ex01/Makefile | 44 +---------------------------- module00/ex02/Makefile | 44 +---------------------------- module00/ex03/Makefile | 44 +---------------------------- module00/ex04/Makefile | 44 +---------------------------- module01/ex00/Makefile | 44 +---------------------------- module01/ex01/Makefile | 44 +---------------------------- 9 files changed, 76 insertions(+), 308 deletions(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b24ce9b --- /dev/null +++ b/Makefile @@ -0,0 +1,64 @@ +# frequency of the CPU (in Hz) +F_CPU = 16000000UL +TARGET = main +CC = avr-gcc + +AVRGCC_MCU_TYPE = atmega328p +AVRDUDE_MCU_TYPE = m328p +BAUD_RATE = 115200 +PROGRAMMER_ID = arduino + +# original firmware dump +DUMP_ORI = ../../ressources/dump_atmega328p_ori.hex + +# Detect OS +OS := $(shell uname -s) + +# Set Serial Port based on OS +ifeq ($(OS), Darwin) # macOS + SERIAL_PORT := $(shell ls /dev/tty.usb* 2>/dev/null | head -n 1) # should be : /dev/tty.usbserial-310 +else ifeq ($(OS), Linux) # Ubuntu/Linux + SERIAL_PORT = $(shell ls /dev/ttyUSB* 2>/dev/null | head -n 1) # should be : /dev/ttyUSB0 +endif + +## +## RULES +## + +all: hex flash + +hex: $(TARGET).hex + +# avr-gcc : compiler for AVR microcontrollers, https://gcc.gnu.org/wiki/avr-gcc#Using_avr-gcc, https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html +# -mmcu : the target microcontrolle (ATmega328P) +# -D : defines a preprocessor macro (#define F_CPU ) +# -o : output filename +$(TARGET).bin: $(TARGET).c + $(CC) -mmcu=$(AVRGCC_MCU_TYPE) -D F_CPU=$(F_CPU) $(TARGET).c -Os -o $(TARGET).bin + +# avr-objcopy : man avr-jobcopy, https://linux.die.net/man/1/avr-objcopy +# -O : specifies output format, Intel HEX +# some formats (list not found in any doc) : +# -O ihex : Used for flashing AVR chips +# -O binary : Raw binary file +# -O elf32-avr : Used for debugging +$(TARGET).hex: $(TARGET).bin + avr-objcopy -O ihex $(TARGET).bin $(TARGET).hex + +# avr-dude : AVR Downloader/UploaDEr, upload firmware, https://avrdudes.github.io/avrdude, v6.3 https://download-mirror.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf +# -p : specifies the microcontroller -> m328p +# -c : programmer-id +# -b : baud rate for serial communication +# -P : the serial port, found with `ls /dev/tty*` -> /dev/ttyUSB0 +# -U : Uploads (w = write) the HEX firmware file to the flash memory +# (-v : verbose info dump) +flash: + avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(TARGET).hex + +restore: + avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(DUMP_ORI) + +clean: + rm -f main.hex main.bin + +.PHONY : all clean hex flash restore \ No newline at end of file diff --git a/README.md b/README.md index 2021fb6..4029e34 100644 --- a/README.md +++ b/README.md @@ -79,3 +79,8 @@ avrdude: safemode: Fuses OK (E:00, H:00, L:00) avrdude done. Thank you. ``` + +## makefile on mac + +- `brew tap osx-cross/avr` +- `brew install avr-gcc avrdude` diff --git a/module00/ex00/Makefile b/module00/ex00/Makefile index b7893fd..2e40cba 100644 --- a/module00/ex00/Makefile +++ b/module00/ex00/Makefile @@ -1,50 +1 @@ -# frequency of the CPU (in Hz) -F_CPU = 16000000UL -TARGET = main -CC = avr-gcc - - -all: hex flash - -hex: $(TARGET).hex - -# avr-gcc : compiler for AVR microcontrollers, https://gcc.gnu.org/wiki/avr-gcc#Using_avr-gcc, https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html -# -mmcu : the target microcontrolle (ATmega328P) -# -D : defines a preprocessor macro (#define F_CPU ) -# -o : output filename -$(TARGET).bin: $(TARGET).c - $(CC) -mmcu=atmega328p -D F_CPU=$(F_CPU) $(TARGET).c -o $(TARGET).bin - - -# avr-objcopy : man avr-jobcopy, https://linux.die.net/man/1/avr-objcopy -# -O : specifies output format, Intel HEX -# some formats (list not found in any doc) : -# -O ihex : Used for flashing AVR chips -# -O binary : Raw binary file -# -O elf32-avr : Used for debugging -$(TARGET).hex: $(TARGET).bin - avr-objcopy -O ihex $(TARGET).bin $(TARGET).hex - - -# avr-dude : AVR Downloader/UploaDEr, upload firmware, https://avrdudes.github.io/avrdude, v6.3 https://download-mirror.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf -# -p : specifies the microcontroller -> m328p -# -c : programmer-id -# -b : baud rate for serial communication -# -P : the serial port, found with `ls /dev/tty*` -> /dev/ttyUSB0 -# -U : Uploads (w = write) the HEX firmware file to the flash memory -# (-v : verbose info dump) -flash: - avrdude -p m328p -c arduino -b 115200 -P /dev/ttyUSB0 -U flash:w:$(TARGET).hex -# avrdude -p m328p -c arduino -b 115200 -P /dev/ttyUSB0 -v -# avrdude -p m328p -c arduino -b 115200 -P /dev/ttyUSB0 -U flash:w:../../ressources/dump_atmega328p_ori.hex - - -dump: - avrdude -p m328p -c arduino -b 115200 -P /dev/ttyUSB0 -U flash:r:dump_atmega328p.hex - - -clean: - rm -f main.hex main.bin - - -.PHONY : all clean hex flash dump \ No newline at end of file +include ../../Makefile \ No newline at end of file diff --git a/module00/ex01/Makefile b/module00/ex01/Makefile index 56b54a5..2e40cba 100644 --- a/module00/ex01/Makefile +++ b/module00/ex01/Makefile @@ -1,43 +1 @@ -# frequency of the CPU (in Hz) -F_CPU = 16000000UL -TARGET = main -CC = avr-gcc - -AVRGCC_MCU_TYPE = atmega328p -AVRDUDE_MCU_TYPE = m328p -BAUD_RATE = 115200 -SERIAL_PORT = /dev/ttyUSB0 -PROGRAMMER_ID = arduino -DUMP_ORI = ../../ressources/dump_atmega328p_ori.hex - - -all: hex flash - - -hex: $(TARGET).hex - - -# https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html -$(TARGET).bin: $(TARGET).c - $(CC) -mmcu=$(AVRGCC_MCU_TYPE) -D F_CPU=$(F_CPU) $(TARGET).c -Os -o $(TARGET).bin - - -# https://linux.die.net/man/1/avr-objcopy -$(TARGET).hex: $(TARGET).bin - avr-objcopy -O ihex $(TARGET).bin $(TARGET).hex - - -# AVR Downloader/UploaDEr https://avrdudes.github.io/avrdude (v6.3 https://download-mirror.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf) -flash: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(TARGET).hex - - -restore: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(DUMP_ORI) - - -clean: - rm -f main.hex main.bin - - -.PHONY : all clean hex flash restore \ No newline at end of file +include ../../Makefile \ No newline at end of file diff --git a/module00/ex02/Makefile b/module00/ex02/Makefile index 56b54a5..2e40cba 100644 --- a/module00/ex02/Makefile +++ b/module00/ex02/Makefile @@ -1,43 +1 @@ -# frequency of the CPU (in Hz) -F_CPU = 16000000UL -TARGET = main -CC = avr-gcc - -AVRGCC_MCU_TYPE = atmega328p -AVRDUDE_MCU_TYPE = m328p -BAUD_RATE = 115200 -SERIAL_PORT = /dev/ttyUSB0 -PROGRAMMER_ID = arduino -DUMP_ORI = ../../ressources/dump_atmega328p_ori.hex - - -all: hex flash - - -hex: $(TARGET).hex - - -# https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html -$(TARGET).bin: $(TARGET).c - $(CC) -mmcu=$(AVRGCC_MCU_TYPE) -D F_CPU=$(F_CPU) $(TARGET).c -Os -o $(TARGET).bin - - -# https://linux.die.net/man/1/avr-objcopy -$(TARGET).hex: $(TARGET).bin - avr-objcopy -O ihex $(TARGET).bin $(TARGET).hex - - -# AVR Downloader/UploaDEr https://avrdudes.github.io/avrdude (v6.3 https://download-mirror.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf) -flash: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(TARGET).hex - - -restore: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(DUMP_ORI) - - -clean: - rm -f main.hex main.bin - - -.PHONY : all clean hex flash restore \ No newline at end of file +include ../../Makefile \ No newline at end of file diff --git a/module00/ex03/Makefile b/module00/ex03/Makefile index 56b54a5..2e40cba 100644 --- a/module00/ex03/Makefile +++ b/module00/ex03/Makefile @@ -1,43 +1 @@ -# frequency of the CPU (in Hz) -F_CPU = 16000000UL -TARGET = main -CC = avr-gcc - -AVRGCC_MCU_TYPE = atmega328p -AVRDUDE_MCU_TYPE = m328p -BAUD_RATE = 115200 -SERIAL_PORT = /dev/ttyUSB0 -PROGRAMMER_ID = arduino -DUMP_ORI = ../../ressources/dump_atmega328p_ori.hex - - -all: hex flash - - -hex: $(TARGET).hex - - -# https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html -$(TARGET).bin: $(TARGET).c - $(CC) -mmcu=$(AVRGCC_MCU_TYPE) -D F_CPU=$(F_CPU) $(TARGET).c -Os -o $(TARGET).bin - - -# https://linux.die.net/man/1/avr-objcopy -$(TARGET).hex: $(TARGET).bin - avr-objcopy -O ihex $(TARGET).bin $(TARGET).hex - - -# AVR Downloader/UploaDEr https://avrdudes.github.io/avrdude (v6.3 https://download-mirror.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf) -flash: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(TARGET).hex - - -restore: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(DUMP_ORI) - - -clean: - rm -f main.hex main.bin - - -.PHONY : all clean hex flash restore \ No newline at end of file +include ../../Makefile \ No newline at end of file diff --git a/module00/ex04/Makefile b/module00/ex04/Makefile index 56b54a5..2e40cba 100644 --- a/module00/ex04/Makefile +++ b/module00/ex04/Makefile @@ -1,43 +1 @@ -# frequency of the CPU (in Hz) -F_CPU = 16000000UL -TARGET = main -CC = avr-gcc - -AVRGCC_MCU_TYPE = atmega328p -AVRDUDE_MCU_TYPE = m328p -BAUD_RATE = 115200 -SERIAL_PORT = /dev/ttyUSB0 -PROGRAMMER_ID = arduino -DUMP_ORI = ../../ressources/dump_atmega328p_ori.hex - - -all: hex flash - - -hex: $(TARGET).hex - - -# https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html -$(TARGET).bin: $(TARGET).c - $(CC) -mmcu=$(AVRGCC_MCU_TYPE) -D F_CPU=$(F_CPU) $(TARGET).c -Os -o $(TARGET).bin - - -# https://linux.die.net/man/1/avr-objcopy -$(TARGET).hex: $(TARGET).bin - avr-objcopy -O ihex $(TARGET).bin $(TARGET).hex - - -# AVR Downloader/UploaDEr https://avrdudes.github.io/avrdude (v6.3 https://download-mirror.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf) -flash: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(TARGET).hex - - -restore: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(DUMP_ORI) - - -clean: - rm -f main.hex main.bin - - -.PHONY : all clean hex flash restore \ No newline at end of file +include ../../Makefile \ No newline at end of file diff --git a/module01/ex00/Makefile b/module01/ex00/Makefile index 56b54a5..2e40cba 100644 --- a/module01/ex00/Makefile +++ b/module01/ex00/Makefile @@ -1,43 +1 @@ -# frequency of the CPU (in Hz) -F_CPU = 16000000UL -TARGET = main -CC = avr-gcc - -AVRGCC_MCU_TYPE = atmega328p -AVRDUDE_MCU_TYPE = m328p -BAUD_RATE = 115200 -SERIAL_PORT = /dev/ttyUSB0 -PROGRAMMER_ID = arduino -DUMP_ORI = ../../ressources/dump_atmega328p_ori.hex - - -all: hex flash - - -hex: $(TARGET).hex - - -# https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html -$(TARGET).bin: $(TARGET).c - $(CC) -mmcu=$(AVRGCC_MCU_TYPE) -D F_CPU=$(F_CPU) $(TARGET).c -Os -o $(TARGET).bin - - -# https://linux.die.net/man/1/avr-objcopy -$(TARGET).hex: $(TARGET).bin - avr-objcopy -O ihex $(TARGET).bin $(TARGET).hex - - -# AVR Downloader/UploaDEr https://avrdudes.github.io/avrdude (v6.3 https://download-mirror.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf) -flash: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(TARGET).hex - - -restore: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(DUMP_ORI) - - -clean: - rm -f main.hex main.bin - - -.PHONY : all clean hex flash restore \ No newline at end of file +include ../../Makefile \ No newline at end of file diff --git a/module01/ex01/Makefile b/module01/ex01/Makefile index 56b54a5..2e40cba 100644 --- a/module01/ex01/Makefile +++ b/module01/ex01/Makefile @@ -1,43 +1 @@ -# frequency of the CPU (in Hz) -F_CPU = 16000000UL -TARGET = main -CC = avr-gcc - -AVRGCC_MCU_TYPE = atmega328p -AVRDUDE_MCU_TYPE = m328p -BAUD_RATE = 115200 -SERIAL_PORT = /dev/ttyUSB0 -PROGRAMMER_ID = arduino -DUMP_ORI = ../../ressources/dump_atmega328p_ori.hex - - -all: hex flash - - -hex: $(TARGET).hex - - -# https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html -$(TARGET).bin: $(TARGET).c - $(CC) -mmcu=$(AVRGCC_MCU_TYPE) -D F_CPU=$(F_CPU) $(TARGET).c -Os -o $(TARGET).bin - - -# https://linux.die.net/man/1/avr-objcopy -$(TARGET).hex: $(TARGET).bin - avr-objcopy -O ihex $(TARGET).bin $(TARGET).hex - - -# AVR Downloader/UploaDEr https://avrdudes.github.io/avrdude (v6.3 https://download-mirror.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf) -flash: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(TARGET).hex - - -restore: - avrdude -p $(AVRDUDE_MCU_TYPE) -c $(PROGRAMMER_ID) -b $(BAUD_RATE) -P $(SERIAL_PORT) -U flash:w:$(DUMP_ORI) - - -clean: - rm -f main.hex main.bin - - -.PHONY : all clean hex flash restore \ No newline at end of file +include ../../Makefile \ No newline at end of file