Olle_Filzlaus
16.04.2007, 10:19
Hallo,
ich bin dabei gerade von Bascom auf C umzusteigen. C hatte ich mal in der Schule und hoffe das es mir dadurch etwas leichter Fällt :-)
Na jdenfalls habe ich das AVR Studio installiert und der hat ja automatische auch WinAVR installiert. Das Verzeichniss der Includes eingestellt und dann habe ich diese kleine Programm geschrieben.
/* erstes Programm */
#include <avr/io.h>
int main (void)
{
ddrb = 0xff; //Alle Pins von Port B als Ausgänge
Portb = 0xff; //Portb0 und Portb1 = High, Rest Low
while(1)
{
//leere Schleife
}
return 0; //Wird nie erreicht, ist aber nötig
}
Anschließend wollte ich es Compilieren und dann kan folgender Fehler:
make: *** No rule to make target `../main.c', needed by `main.o'. Stop.
DAs Makefile sieht folgender Maßen aus:
################################################## #############################
# Makefile for the project erstes_Programm
################################################## #############################
## General Flags
PROJECT = erstes_Programm
MCU = atmega16
TARGET = erstes_Programm.elf
CC = avr-gcc.exe
## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -DF_CPU=8000000UL -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=
## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom
HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0
## Include Directories
INCLUDES = -I"C:\WinAVR\avr\include"
## Objects that must be built in order to link
OBJECTS = main.o
## Objects explicitly added by the user
LINKONLYOBJECTS =
## Build
all: $(TARGET) erstes_Programm.hex erstes_Programm.eep size
## Compile
main.o: ../main.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
##Link
$(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
%.hex: $(TARGET)
avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@
%.eep: $(TARGET)
avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@
%.lss: $(TARGET)
avr-objdump -h -S $< > $@
size: ${TARGET}
@echo
@avr-size -C --mcu=${MCU} ${TARGET}
## Clean target
.PHONY: clean
clean:
-rm -rf $(OBJECTS) erstes_Programm.elf dep/* erstes_Programm.hex erstes_Programm.eep
## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
Ich konnte erstmal kein Fehler finden. Ich denke mal der liegt im DEtail und das habe ich noch nicht so richtig raus :-)
Wäre nett wenn ihr mir helfen könntet.
thx Arno
Edit: Habe jetzt mal be Google geuscht und herausbekommen das es ein Fehler in der Version 4.1.1 von AVR sTudio gibt. Hba eaber Version 4.1.2 drauf. Andere Sachen die ich gefunden habe gehen auch nicht.
ich bin dabei gerade von Bascom auf C umzusteigen. C hatte ich mal in der Schule und hoffe das es mir dadurch etwas leichter Fällt :-)
Na jdenfalls habe ich das AVR Studio installiert und der hat ja automatische auch WinAVR installiert. Das Verzeichniss der Includes eingestellt und dann habe ich diese kleine Programm geschrieben.
/* erstes Programm */
#include <avr/io.h>
int main (void)
{
ddrb = 0xff; //Alle Pins von Port B als Ausgänge
Portb = 0xff; //Portb0 und Portb1 = High, Rest Low
while(1)
{
//leere Schleife
}
return 0; //Wird nie erreicht, ist aber nötig
}
Anschließend wollte ich es Compilieren und dann kan folgender Fehler:
make: *** No rule to make target `../main.c', needed by `main.o'. Stop.
DAs Makefile sieht folgender Maßen aus:
################################################## #############################
# Makefile for the project erstes_Programm
################################################## #############################
## General Flags
PROJECT = erstes_Programm
MCU = atmega16
TARGET = erstes_Programm.elf
CC = avr-gcc.exe
## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -DF_CPU=8000000UL -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=
## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom
HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0
## Include Directories
INCLUDES = -I"C:\WinAVR\avr\include"
## Objects that must be built in order to link
OBJECTS = main.o
## Objects explicitly added by the user
LINKONLYOBJECTS =
## Build
all: $(TARGET) erstes_Programm.hex erstes_Programm.eep size
## Compile
main.o: ../main.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
##Link
$(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
%.hex: $(TARGET)
avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@
%.eep: $(TARGET)
avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@
%.lss: $(TARGET)
avr-objdump -h -S $< > $@
size: ${TARGET}
@echo
@avr-size -C --mcu=${MCU} ${TARGET}
## Clean target
.PHONY: clean
clean:
-rm -rf $(OBJECTS) erstes_Programm.elf dep/* erstes_Programm.hex erstes_Programm.eep
## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
Ich konnte erstmal kein Fehler finden. Ich denke mal der liegt im DEtail und das habe ich noch nicht so richtig raus :-)
Wäre nett wenn ihr mir helfen könntet.
thx Arno
Edit: Habe jetzt mal be Google geuscht und herausbekommen das es ein Fehler in der Version 4.1.1 von AVR sTudio gibt. Hba eaber Version 4.1.2 drauf. Andere Sachen die ich gefunden habe gehen auch nicht.