mirror of
https://github.com/johncobb/avr_328p_freertos.git
synced 2025-07-08 08:01:04 +03:00
overhaul
This commit is contained in:
107
Makefile
Normal file
107
Makefile
Normal file
@ -0,0 +1,107 @@
|
||||
# simple AVR Makefile
|
||||
#
|
||||
# written by michael cousins (http://github.com/mcous)
|
||||
# released to the public domain
|
||||
|
||||
# Makefile
|
||||
#
|
||||
# targets:
|
||||
# all: compiles the source code
|
||||
# test: tests the isp connection to the mcu
|
||||
# flash: writes compiled hex file to the mcu's flash memory
|
||||
# fuse: writes the fuse bytes to the MCU
|
||||
# disasm: disassembles the code for debugging
|
||||
# clean: removes all .hex, .elf, and .o files in the source code and library directories
|
||||
|
||||
# parameters (change this stuff accordingly)
|
||||
# project name
|
||||
PRJ = main
|
||||
# avr mcu
|
||||
MCU = atmega328p
|
||||
# mcu clock frequency
|
||||
# CLK = 16000000
|
||||
CLK = 8000000
|
||||
# avr programmer (and port if necessary)
|
||||
# e.g. PRG = usbtiny -or- PRG = arduino -P /dev/tty.usbmodem411
|
||||
PRG = usbtiny
|
||||
# fuse values for avr: low, high, and extended
|
||||
# these values are from an Arduino Uno (ATMega328P)
|
||||
# see http://www.engbedded.com/fusecalc/ for other MCUs and options
|
||||
LFU = 0xFF
|
||||
HFU = 0xDE
|
||||
EFU = 0x05
|
||||
# program source files (not including external libraries)
|
||||
SRC = $(PRJ).cpp
|
||||
# where to look for external libraries (consisting of .c/.cpp files and .h files)
|
||||
# e.g. EXT = ../../EyeToSee ../../YouSART
|
||||
EXT = Source Drivers Source/include Source/portable Source/portable/GCC/ATMega328 Source/portable/MemMang
|
||||
|
||||
|
||||
#################################################################################################
|
||||
# \/ stuff nobody needs to worry about until such time that worrying about it is appropriate \/ #
|
||||
#################################################################################################
|
||||
|
||||
# include path
|
||||
INCLUDE := $(foreach dir, $(EXT), -I$(dir))
|
||||
# c flags
|
||||
CFLAGS = -Wall -Os -DF_CPU=$(CLK) -mmcu=$(MCU) $(INCLUDE)
|
||||
# any aditional flags for c++
|
||||
CPPFLAGS =
|
||||
|
||||
# executables
|
||||
AVRDUDE = avrdude -c $(PRG) -p $(MCU)
|
||||
OBJCOPY = avr-objcopy
|
||||
OBJDUMP = avr-objdump
|
||||
SIZE = avr-size --format=avr --mcu=$(MCU)
|
||||
CC = avr-gcc
|
||||
|
||||
# generate list of objects
|
||||
CFILES = $(filter %.c, $(SRC))
|
||||
EXTC := $(foreach dir, $(EXT), $(wildcard $(dir)/*.c))
|
||||
CPPFILES = $(filter %.cpp, $(SRC))
|
||||
EXTCPP := $(foreach dir, $(EXT), $(wildcard $(dir)/*.cpp))
|
||||
OBJ = $(CFILES:.c=.o) $(EXTC:.c=.o) $(CPPFILES:.cpp=.o) $(EXTCPP:.cpp=.o)
|
||||
|
||||
# user targets
|
||||
# compile all files
|
||||
all: $(PRJ).hex
|
||||
|
||||
# test programmer connectivity
|
||||
test:
|
||||
$(AVRDUDE) -v
|
||||
|
||||
# flash program to mcu
|
||||
flash: all
|
||||
$(AVRDUDE) -U flash:w:$(PRJ).hex:i
|
||||
|
||||
# write fuses to mcu
|
||||
fuse:
|
||||
$(AVRDUDE) -U lfuse:w:$(LFU):m -U hfuse:w:$(HFU):m -U efuse:w:$(EFU):m
|
||||
|
||||
# generate disassembly files for debugging
|
||||
disasm: $(PRJ).elf
|
||||
$(OBJDUMP) -d $(PRJ).elf
|
||||
|
||||
# remove compiled files
|
||||
clean:
|
||||
rm -f *.hex *.elf *.o
|
||||
$(foreach dir, $(EXT), rm -f $(dir)/*.o;)
|
||||
|
||||
# other targets
|
||||
# objects from c files
|
||||
.c.o:
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
# objects from c++ files
|
||||
.cpp.o:
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
|
||||
|
||||
# elf file
|
||||
$(PRJ).elf: $(OBJ)
|
||||
$(CC) $(CFLAGS) -o $(PRJ).elf $(OBJ)
|
||||
|
||||
# hex file
|
||||
$(PRJ).hex: $(PRJ).elf
|
||||
rm -f $(PRJ).hex
|
||||
$(OBJCOPY) -j .text -j .data -O ihex $(PRJ).elf $(PRJ).hex
|
||||
$(SIZE) $(PRJ).elf
|
Reference in New Issue
Block a user