After one has written the C program, one needs to compile it into a format which conforms to the microcontroller’s understanding. In the case of an AVR microcontroller, it is the Intel HEX format. The avr-gcc is a set of utilities which comes bundled with every package of Linux (for Windows systems, download WinAVR) and is used to compile the C code into Intel HEX code.
A makefile is nothing but a set of instructions which eases the task of typing in the compile commands every time one needs to compile. To compile using a makefile, one just needs to type make and everything’s done.
# Makefile for generating Intel HEX files for the AVR MCU using avr-gcc and binutils # By - Nandan Banerjee # December 24, 2011 # # Change the MCU_TARGET to the AVR microcontroller you wish to generate the HEX file for. # Change the PRG to the name of the C program file which you want to build. # Set the optimizations in the OPTIMIZE macro. # Comment the FILES_GENERATED macro if you want to keep the files generated. PRG = main OBJ = $(PRG).o MCU_TARGET = atmega32 OPTIMIZE = -Os CC = avr-gcc CFLAGS = -g $(OPTIMIZE) -mmcu=$(MCU_TARGET) OBJCOPY = avr-objcopy OBJDUMP = avr-objdump FILES_GENERATED = $(PRG).elf $(PRG).bin $(OBJ) $(PRG).lst $(PRG).srec all: $(PRG).elf $(PRG).lst text clean $(PRG).elf: $(OBJ) $(CC) $(CFLAGS) -o $@ $^ $(OBJ): $(PRG).c $(CC) $(CFLAGS) -c $< $(PRG).lst: $(PRG).elf $(OBJDUMP) -h -S $< > $@ text: hex bin srec hex: $(PRG).hex bin: $(PRG).bin srec: $(PRG).srec $(PRG).hex: $(PRG).elf $(OBJCOPY) -j .text -j .data -O ihex $< $@ $(PRG).srec: $(PRG).elf $(OBJCOPY) -j .text -j .data -O srec $< $@ $(PRG).bin: $(PRG).elf $(OBJCOPY) -j .text -j .data -O binary $< $@ clean: rm -rf $(FILES_GENERATED)