Hallo zusammen. Wen ich in C programmiere (Studio 4) bekomme ich beim Compalieren folgende Fehlermeldungen: avr-opjcopy: 'test.elf' no such file. normalerweise müsste diese Datei doch vom Compiler erzeugt werden. fehlt da vielleicht etwas im makefile? Im Makefile steht: TARGET = test.elf Win XP, AVR Studio4 + WinAVR.
haderlump schrieb: > fehlt da vielleicht etwas im makefile? > Im Makefile steht: TARGET = test.elf Wenn das alles ist, was im Makefile steht, fehlt bestimmt was.
haderlump schrieb: > normalerweise müsste diese Datei doch vom Compiler erzeugt werden. > fehlt da vielleicht etwas im makefile? Im AvrStudio Project/Configuration Options/Custom Options öffnen, in External Tools "Use AVR Toolchain" auschecken. Path zu avr-gcc und make eintragen, normalerweise in: "WinAVR\bin\avr-gcc.exe" und "WinAVR\utils\bin\make.exe"
So, nun bin ich ein Stück weiter. Ich hatte zu Testzwecken nur eine leere main Funktion, und sonst garnix. Kein Inhalt, keie elf-Datei. Nun habe ich das 1. Testprogramm aus dem Tutorial verwendet. Nun gibt es eine andere Fehlermeldung: Build started 12.6.2016 at 06:11:56 make: *** No rule to make target `../test.c', needed by `test.o'. Stop. Build failed with 1 errors and 0 warnings... Das Make-File hat folgenden Inhalt. ######################################################################## ####### # Makefile for the project test ######################################################################## ####### ## General Flags PROJECT = test MCU = atmega168 TARGET = test.elf CC = CPP = avr-g++ ## 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 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d ## Assembly specific flags ASMFLAGS = $(COMMON) ASMFLAGS += $(CFLAGS) ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2 ## Linker flags LDFLAGS = $(COMMON) LDFLAGS += -Wl,-Map=test.map ## Intel Hex file production flags HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature HEX_EEPROM_FLAGS = -j .eeprom HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load" HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings ## Objects that must be built in order to link OBJECTS = test.o ## Objects explicitly added by the user LINKONLYOBJECTS = ## Build all: $(TARGET) test.hex test.eep test.lss## Compile test.o: ../test.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 $< $@ || exit 0 %.lss: $(TARGET) avr-objdump -h -S $< > $@ ## Clean target .PHONY: clean clean: -rm -rf $(OBJECTS) test.elf dep/* test.hex test.eep test.lss test.map ## Other dependencies -include $(shell mkdir dep 2>NUL) $(wildcard dep/*) Da steht sehr viel., was ich als Anfänger nicht verstehe. Diese Makefile wurde wohl bei den Programminstalationen von Studio4 bzw. WinAVR automatisch erzeugt. Stammt also nicht von mir. Und ich werde mich hüten, hier eigenmächtig etwas zu ändern
Das bedeutet für gewöhnlich, dass die Datei test.c nicht vorhanden oder nicht im richtigen Verzeichnis vorhanden ist. Normalerweise erzeugt AVRStudio das makefile schon ganz richtig und legt auch die C-Dateien in den den richtigen Verzeichnissen an. Hast Du evtl. am AVRStudio vorbei mit einem Editor gearbeitet? Oder nachträglich etwas verändert? Hast Du das Projekt völlig neu angelegt? Oder Dein altes weiterverwendet? Es kann schon sein, dass man als Anfänger da ein wenig zu viel am AVRStudio vorbei "herumfummelt". Falls das so ist, lass das erstmal. Einfach nur geradeaus, so wie es in den Help-Files steht, arbeiten. Ich schlage vor, dass Du test.c irgendwoanders hin kopierst und dann das komplette Projekt-Verzeichnis löschst. Dann legst Du ein neues Projekt an. Füge in AVRStudio den Inhalt des wegkopierten test.c mit copy und paste ein. Alternativ schaue einmal, wo das neue c-File sich aufhält und kopiere die wegkopierte Datei dorthin.
Danke für dieAntwort. Ich habe nun das Testverzeichnis gelöscht, und von vorne angefangen. Jetzt gibt es eine neue Fehlermeldung: Build started 12.6.2016 at 06:45:24 mmcu=atmega168 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT test2.o -MF dep/test2.o.d -c ../test2.c /usr/bin/sh: -Wall: command not found make: [test2.o] Error 127 (ignored) mmcu=atmega168 -Wl,-Map=test2.map test2.o -o test2.elf /usr/bin/sh: -Wl,-Map=test2.map: command not found make: [test2.elf] Error 127 (ignored) avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature test2.elf test2.hex avr-objcopy: 'test2.elf': No such file make: *** [test2.hex] Error 1 Build failed with 1 errors and 0 warnings...
Es ist mir erst garnicht aufgefallen, aber in Deinem ersten makefile war zu sehen, dass die Variable CC nicht gesetzt ist. Kannst ja mal nachschauen ob das in dem neuen make-file auch so ist. Kann es sein, dass Du den WinAVR in AVRStudio nicht eingerichtet hast? Schaue mal in den Projekteinstellungen ob die Pfade für den WinAVR und make richtig eingestellt sind. Falls die fehlen, setze sie richtig. Das kann passieren, wenn man erst das AVRStudio installiert hat und dann erst WinAVR. Es kann auch sein, dass Du das jedesmal bei einem neuen Projekt machen musst. Abhilfe wäre, AVRStudio und WinAVR neu zu installieren und in der richtigen Reihenfolge. Aber zunächst einmal einfach in den Projekteinstellungen nachschauen.
Weitere Hinweise bekommst Du, wenn Du mal auf den blauen Schriftzug WinAVR klickst. Da geht es zu einem Artikel darüber.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.