Uh-ohh, 50 instances of make in the processlist

Go To Last Post
14 posts / 0 new
Author
Message
#1
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Help!

Somehow I managed to get 30 to 50 instances of make running on my lappy after clicking Make ALL in PN:

Since yesterday I end up with a scrolling output window which tries to resolve dependancies. Ive been believing its my code that has gone to Mars and back, but now ive reverted to a backup known to work and it still gives never ending compile problem.

Help is greatly appreciated!

Edit:
Platform:
Pentium mobile laptop,
Windowshh xp with sp2 freshly installed

Using a patched avr-dude (usb-asp bug patch with 0x8000 limit)

MY MICROCONTROLLER CAN BEAT THE HELL OUT OF YOUR MICROCONTROLLER /ATMEL

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Do you see a chance to provide the makefile? Otherwise the help might not realy satisfy you.
Knut

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I got that the other day, due to accidentally making my make process recursive.

If you have Process Explorer or the like, you can find and kill the parent process, destroying all the child processes at the same time.

- Dean :twisted:

Make Atmel Studio better with my free extensions. Open source and feedback welcome!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

This is the makefile
Makefile



# MCU name
MCU = atmega128


# Output format. (can be srec, ihex, binary)
FORMAT = ihex

# Target file name (without extension).
TARGET = main

# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s


# List C source files here. (C dependencies are automatically generated.)

SRC	= \
main.c \
basic/delay.c \
uart/uart.c \
basic/spi.c \
mmc/mmc.c \
fat/fat.c \
fat/fat_common.c \
fat/fat_cluster.c \
fat/fat_create.c \
fat/fat_date.c \
fat/fat_delete.c \
fat/fat_diraccess.c \
fat/fat_entry.c \
fat/fat_fileaccess.c \
fat/fat_filename.c \
dsp/vs1001.c \
dsp/playcode.c \
rtc/rtc.c \
cmdshell.c \
ata/ata.c 




F_CPU = 16643000
# If there is more than one source file, append them above, or modify and
# uncomment the following:
#SRC += foo.c bar.c

# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c



# List Assembler source files here.
# Make them always end in a capital .S.  Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC = 


# List any extra directories to look for include files here.
#     Each directory must be seperated by a space.
EXTRAINCDIRS = 


# Optional compiler flags.
#  -g:        generate debugging information (for GDB, or for COFF conversion)
#  -O*:       optimization level
#  -f...:     tuning, see gcc manual and avr-libc documentation
#  -Wall...:  warning level
#  -Wa,...:   tell GCC to pass this to the assembler.
#    -ahlms:  create assembler listing

DEBUG_LEVEL=-g
WARNINGS=-Wall -Wextra -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare \
		-Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused
#CFLAGS = -D GCC_MEGA_AVR -I. -I../../Source/include -I../Common/include  \

CFLAGS = -DF_CPU=$(F_CPU)UL $(patsubst %,-I%,$(EXTRAINCDIRS))  \
$(DEBUG_LEVEL) -O$(OPT) \
-fsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
$(WARNINGS) \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))


# Set a "language standard" compiler flag.
#   Unremark just one line below to set the language standard to use.
#   gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99



# Optional assembler flags.
#  -Wa,...:   tell GCC to pass this to the assembler.
#  -ahlms:    create listing
#  -gstabs:   have the assembler create line number information; note that
#             for use in COFF files, additional information about filenames
#             and function names needs to be present in the assembler source
#             files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 



# Optional linker flags.
#  -Wl,...:   tell GCC to pass this to linker.
#  -Map:      create map file
#  --cref:    add cross reference to  map file
LDFLAGS = -Wl,--defsym=__heap_start=0x802000,--defsym=__heap_end=0x807fff,-Map=$(TARGET).map,--cref 



# Additional libraries

# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min

# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt

# -lm = math library
LDFLAGS += -lm




# Programming support using avrdude. Settings and variables.

# Programming hardware: alf avr910 avrisp bascom bsd 
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = usbasp


AVRDUDE_PORT = usb	   # programmer connected to serial device
#AVRDUDE_PORT = lpt1	# programmer connected to parallel port

AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep

AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)

# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y

# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_FLAGS += -V

# Increase verbosity level.  Please use this when submitting bug
# reports about avrdude. See  
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v




# ---------------------------------------------------------------------------

# Define directories, if needed.
DIRAVR = c:/WinAVR-20070525
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib


# Define programs and commands.
SHELL = sh

CC = avr-gcc

OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size


# Programming support using avrdude.
AVRDUDE = avrdude


REMOVE = rm -f
COPY = cp

HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf



# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = --------  end  --------
MSG_SIZE_BEFORE = Size before: 
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:




# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 

# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)

# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)



# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
	$(TARGET).lss $(TARGET).sym sizeafter finished end


# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
	@echo
	@echo $(MSG_BEGIN)

finished:
	@echo $(MSG_ERRORS_NONE)

end:
	@echo $(MSG_END)
	@echo


# Display size of file.
sizebefore:
	@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi

sizeafter:
	@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi



# Display compiler version information.
gccversion : 
	@$(CC) --version




# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
	--change-section-address .data-0x800000 \
	--change-section-address .bss-0x800000 \
	--change-section-address .noinit-0x800000 \
	--change-section-address .eeprom-0x810000 


coff: $(TARGET).elf
	@echo
	@echo $(MSG_COFF) $(TARGET).cof
	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof


extcoff: $(TARGET).elf
	@echo
	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof




# Program the device.  
program: $(TARGET).hex $(TARGET).eep
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)




# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
	@echo
	@echo $(MSG_FLASH) $@
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

%.eep: %.elf
	@echo
	@echo $(MSG_EEPROM) $@
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# Create extended listing file from ELF output file.
%.lss: %.elf
	@echo
	@echo $(MSG_EXTENDED_LISTING) $@
	$(OBJDUMP) -h -S $< > $@

# Create a symbol table from ELF output file.
%.sym: %.elf
	@echo
	@echo $(MSG_SYMBOL_TABLE) $@
	avr-nm -n $< > $@



# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
	@echo
	@echo $(MSG_LINKING) $@
	$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)


# Compile: create object files from C source files.
%.o : %.c
	@echo
	@echo $(MSG_COMPILING) $<
	$(CC) -c $(ALL_CFLAGS) $< -o $@


# Compile: create assembler files from C source files.
%.s : %.c
	$(CC) -S $(ALL_CFLAGS) $< -o $@


# Assemble: create object files from assembler source files.
%.o : %.S
	@echo
	@echo $(MSG_ASSEMBLING) $<
	$(CC) -c $(ALL_ASFLAGS) $< -o $@






# Target: clean project.
clean: begin clean_list finished end

clean_list :
	@echo
	@echo $(MSG_CLEANING)
	$(REMOVE) $(TARGET).hex
	$(REMOVE) $(TARGET).eep
	$(REMOVE) $(TARGET).obj
	$(REMOVE) $(TARGET).cof
	$(REMOVE) $(TARGET).elf
	$(REMOVE) $(TARGET).map
	$(REMOVE) $(TARGET).obj
	$(REMOVE) $(TARGET).a90
	$(REMOVE) $(TARGET).sym
	$(REMOVE) $(TARGET).lnk
	$(REMOVE) $(TARGET).lss
	$(REMOVE) $(OBJ)
	$(REMOVE) $(LST)
	$(REMOVE) $(SRC:.c=.s)
	$(REMOVE) $(SRC:.c=.d)


# Automatically generate C source code dependencies. 
# (Code originally taken from the GNU make user manual and modified 
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
	set -e; $(CC) -MM $(ALL_CFLAGS) $< \
	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
	[ -s $@ ] || rm -f $@


# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)



# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
	clean clean_list program


Killing it by clicking kill process tree stops all instances of Make in the process list

MY MICROCONTROLLER CAN BEAT THE HELL OUT OF YOUR MICROCONTROLLER /ATMEL

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Do you get the same effect if you start a commmand prompt, go to the directory containing the Makefile and do

make all

there?

Have you tampered with the tool definition for the Make ALL tool in PN? What does it look like?

Do you get the same effect for other projects/Makefiles when using the Make ALL tool in PN?

(Trying to determine if it's the makefile or PN that is messing with you here.)

As of January 15, 2018, Site fix-up work has begun! Now do your part and report any bugs or deficiencies here

No guarantees, but if we don't report problems they won't get much of  a chance to be fixed! Details/discussions at link given just above.

 

"Some questions have no answers."[C Baird] "There comes a point where the spoon-feeding has to stop and the independent thinking has to start." [C Lawson] "There are always ways to disagree, without being disagreeable."[E Weddington] "Words represent concepts. Use the wrong words, communicate the wrong concept." [J Morin] "Persistence only goes so far if you set yourself up for failure." [Kartman]

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Starting the Command line, typing it from there result the same behaviour. Rather odd.

Here's the output, im not that technical as it comes down to compilers and their activities, but this looks like dependancy building to me.

set -e; avr-gcc -MM -mmcu=atmega128 -I. -DF_CPU=16643000UL  -g -Os -fsigned-char
 -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wextra -Wshadow -Wpoint
er-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Waggregate-return -Wst
rict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused -Wa,-adhlns
=dsp/playcode.lst  -std=gnu99 dsp/playcode.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > dsp/playcode.d; \
        [ -s dsp/playcode.d ] || rm -f dsp/playcode.d
set -e; avr-gcc -MM -mmcu=atmega128 -I. -DF_CPU=16643000UL  -g -Os -fsigned-char
 -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wextra -Wshadow -Wpoint
er-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Waggregate-return -Wst
rict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused -Wa,-adhlns
=dsp/vs1001.lst  -std=gnu99 dsp/vs1001.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > dsp/vs1001.d; \
        [ -s dsp/vs1001.d ] || rm -f dsp/vs1001.d
set -e; avr-gcc -MM -mmcu=atmega128 -I. -DF_CPU=16643000UL  -g -Os -fsigned-char
 -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wextra -Wshadow -Wpoint
er-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Waggregate-return -Wst
rict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused -Wa,-adhlns
=fat/fat_filename.lst  -std=gnu99 fat/fat_filename.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > fat/fat_filename.d; \
        [ -s fat/fat_filename.d ] || rm -f fat/fat_filename.d
set -e; avr-gcc -MM -mmcu=atmega128 -I. -DF_CPU=16643000UL  -g -Os -fsigned-char
 -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wextra -Wshadow -Wpoint
er-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Waggregate-return -Wst
rict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused -Wa,-adhlns
=fat/fat_cluster.lst  -std=gnu99 fat/fat_cluster.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > fat/fat_cluster.d; \
        [ -s fat/fat_cluster.d ] || rm -f fat/fat_cluster.d
set -e; avr-gcc -MM -mmcu=atmega128 -I. -DF_CPU=16643000UL  -g -Os -fsigned-char
 -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wextra -Wshadow -Wpoint
er-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Waggregate-return -Wst
rict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused -Wa,-adhlns
=fat/fat_common.lst  -std=gnu99 fat/fat_common.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > fat/fat_common.d; \
        [ -s fat/fat_common.d ] || rm -f fat/fat_common.d
set -e; avr-gcc -MM -mmcu=atmega128 -I. -DF_CPU=16643000UL  -g -Os -fsigned-char
 -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wextra -Wshadow -Wpoint
er-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Waggregate-return -Wst
rict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused -Wa,-adhlns
=mmc/mmc.lst  -std=gnu99 mmc/mmc.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > mmc/mmc.d; \
        [ -s mmc/mmc.d ] || rm -f mmc/mmc.d

I have not tampered , atleast not that I know of with any setting other than making 'pre processor' colours blue :)

It seems to be occuring only with one of my projects. But as I said, I know i have backed up a working copy and that doesnt compile (anymore)

Starting stripping down the code see where the rabbit hole ends

MY MICROCONTROLLER CAN BEAT THE HELL OUT OF YOUR MICROCONTROLLER /ATMEL

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Like Dean says it's probably a recursive self-reference. Can you confirm that you only include .h in .c (and not .c in .c for example) and that all your .h have the usual guard against multiple inclusion?

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

you mean something like:
#ifndef _I_CAN_RANT_
#define _I_CAN_RANT_

I normally do, is it ok to define it by adding a 1 at the end?

example:
#define _SOME_H_ 1

I have done that intermittantly

MY MICROCONTROLLER CAN BEAT THE HELL OUT OF YOUR MICROCONTROLLER /ATMEL

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Update.
Ive strippe the make file from source files to make.
From a nearly stripped makefile i started uncommenting the lines.
Till the 2nd last line it was just fine till I un-commented the last file, ah a bogus file!!
Nope, I stripped everything else and compiled the bogus file, which ended up being ok.
:|

UPDATE
It compiles (but it takes a while ~ 20 seconds)
with the make file src list in exact increasing dependancy order.

MY MICROCONTROLLER CAN BEAT THE HELL OUT OF YOUR MICROCONTROLLER /ATMEL

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Not quite sure where we're at right now. Did it help? Problem still there?

Does a "make clean" fix it?

Why do I smell a problem pertaining to the croppy time resolution on file timestamps in MS file-systems here? Can you repeat the problem by touching a source file and its result file (the .o file) so that their timestamps are identical, and if so does the problem re-occur when you do a "make all" after that? Will it go away again of you do a "make clean"? (Explanation: MS filesystems have a resolution of 2 seconds on the file timestamps. The effect can be that a saved source file and an object file built from that source can look as if they where created in the same instant, especially if an IDE is making the save of the source and then fires off the build right after that. IIRC this might confuse make).

As of January 15, 2018, Site fix-up work has begun! Now do your part and report any bugs or deficiencies here

No guarantees, but if we don't report problems they won't get much of  a chance to be fixed! Details/discussions at link given just above.

 

"Some questions have no answers."[C Baird] "There comes a point where the spoon-feeding has to stop and the independent thinking has to start." [C Lawson] "There are always ways to disagree, without being disagreeable."[E Weddington] "Words represent concepts. Use the wrong words, communicate the wrong concept." [J Morin] "Persistence only goes so far if you set yourself up for failure." [Kartman]

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:

Like Dean says it's probably a recursive self-reference. Can you confirm that you only include .h in .c (and not .c in .c for example) and that all your .h have the usual guard against multiple inclusion?

Inclusion recursion shouldn't open multiple copies of make. It will, however, cause the current AVR-GCC invocation to enter an infinite loop, although GCC detects the recursion after a while and self-aborts.

In my case, I have a large project including a library, and demo applications using the library. Each level (individual demos, the demos folder as a whole, the library folder and the master project root folder) has it's own makefile, which calls the sub-makefiles to build the various library parts. I forgot to add in a -C parameter to one of the makefiles, so when it was trying to start a new make process to build a sub-project, it was instead running another make process on the same (current) makefile, causing a fork loop.

Several seconds and many tens of make processes later, I killed the process and had to end the process tree to clean it all up.

- Dean :twisted:

Make Atmel Studio better with my free extensions. Open source and feedback welcome!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@

IIRC, that is a REALLY old section from the WinAVR Makefile Template a long time ago. I strongly suggest that you take a look at the most recent WinAVR release and the Makefile Template to see how it's being done now. It's much cleaner and simpler.

Quote:

# Compiler flags to generate dependency files.
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d

# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Sir Weddington!
That worked. Feel a bit ashamed still using a makefile from the days where only a few flavours of AVR where available.

One note, make didnt work straight away it kept wining about

avr-gcc: UL: No such file or directory

I removed the "UL" in the Makefile

# Place -D or -U options here for C sources
CDEFS = -DF_CPU=$(F_CPU)

MY MICROCONTROLLER CAN BEAT THE HELL OUT OF YOUR MICROCONTROLLER /ATMEL

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I'm glad that it worked for you. :) I would suggest reworking your project to use the latest WinAVR Makefile Template (or MFile, which uses the same thing). That is known to work without any issues with "UL".