Forum: Mikrocontroller und Digitale Elektronik .elf datei not found


von haderlump (Gast)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

Ich bin kein AVR Studio4 spezi....
Aber, wenn ein Error geworfen wird, gibts keine elf Datei...

von omg (Gast)


Lesenswert?

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.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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"

von haderlump (Gast)


Lesenswert?

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

von Hosenmatz (Gast)


Lesenswert?

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.

von haderlump (Gast)


Lesenswert?

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...

von Hosenmatz (Gast)


Lesenswert?

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.

von Hosenmatz (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.