Werbung
Hallo erstmal.
Wenn ich mit der neuen Lib ein Programm im Programmers Notepad in eine .hex umwandeln will, kommt folgende Fehlermeldung:
Externes Bild anzeigen
Dabei wurde dieses simple Programm verwendet:
Ich habe dann wohl irgendetwas bei der Installation der Lib falsch gemacht...Code:/*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * any later version. * ***************************************************************************/ #include "asuro.h" int main(void) { Init(); StatusLED(YELLOW); while (1); return 0; }![]()
Jedoch habe ich mich genau an die Anleitung gehalten:
Als erstes habe ich die Lib (Ver. 2.80rc1) heruntergeladen, und entpackt. (Ich habe sie natürlich nicht in einen WinAVR-Ordner entpackt.)
Danach habe ich die neuste WinAVR Version installiert. (Ver. 20081205)
Dann habe ich alle Dateien aus LibHome/lib/inc nach WinAVR/avr/include kopiert, und die Datei libasuro.a aus LibHome/lib nach WinAVR/avr/lib kopiert.
Nachdem ich das gemacht habe, habe ich dann zwei Makefiles so geändert, wie in der Anleitung beschrieben, und zwar einmal die Makefile aus LibHome/lib und die Makefile aus LibHome/examples/FirstTry.
Schließlich habe ich die Lib dann noch mithilfe der Eingabeaufforderung übersetzt.
So müsste es doch eigentlich klappen...?
Doch wenn ich nun ein Programm mit der test.c aus dem FirstTry-Ordner schreibe und es übersetze, kommt diese Fehlermeldung.
Was mache ich falsch?
Der Optimist: \"Das Glas ist halb voll.\"
Der Pessimist: \"Das Glas ist halb leer.\"
Der Ingenieur: \"Das Glas ist doppelt so groß wie es sein müßte.\"
Genau, achte mahl auf die \ und / zeichen im path. In die makefile sollen / stehen sondern wirds nicht klappen. Aber Windows Explorer selbst versteht oder gibt nur paths mit \ zeichen. Irgendwo im make algorithmus wirds umgewandelt nach 'Windows-sprache'.
Vielen Dank für die Hilfe!
Ihr habt Recht, mit der LIBPATH-Angabe stimmte etwas nicht. Es war eine völlig falsche Angabe!
Wäre es denn möglich, dass ich die LIBPATH Zeile korrigiere und die Lib dann nochmal neu übersetze, oder muss ich alles nochmal machen?
€dit: Ich habe mal in der Anleitung nachgelesen, da steht gar nichts von einer LIBPATH-Zeile, nur eine VPATH-Zeile wird erwähnt.![]()
Nun habe ich mal in der Makefile nachgesehen, da gibts einmal ein "LIBPATH" vor dem sich das "#"-Symbol befindet und einmal eins ohne das "#-Symbol. Welches muss geändert werden?![]()
Externes Bild anzeigen
Externes Bild anzeigen
Die # ist ein kommentar zeichen. Also #LIBPATH= wirdt ignoriert. Deine rechner sucht fur die lib im "../../lib" verzeichnis. Das sollte du anderen.
der kommentar da drüber soll wahrscheinlich nur zeigen, wie es auszusehen hat.
ansich müsste es danach dann reichen, die lib neu zu übersetzen und dann sollte es gehen (wenn keine anderen fehler mehr im makefile sind).
Der Optimist: \"Das Glas ist halb voll.\"
Der Pessimist: \"Das Glas ist halb leer.\"
Der Ingenieur: \"Das Glas ist doppelt so groß wie es sein müßte.\"
Argh!
Ich habe LIBPATH geändert, ich habe sogar die ganze Lb nochmal neu installiert, doch das Problem besteht weiterhin.![]()
Ich verstehe das nicht!![]()
Also die Makefile sieht jetzt so aus:
Externes Bild anzeigen
Und was hat es eigentlich mit dieser "VPATH-Zeile" auf sich? In der Anleitung von Sternthaler wird ja auch gesagt, dass man da nochmal den Pfad der Lib reinschreiben muss. (Habe ich natürlich gemacht)
seltsam... was hast du denn da für ein makefile?!
meins sieht ganz anders aus... und ich benutze auch die v2.8rc1, bei mir sieht das makefile (aus dem LIB-HOME/lib verzeichnis) so aus:
?!Code:############################################################################### # Makefile for the project AsuroLib ############################################################################### ## General Flags MCU = atmega8 F_CPU = 8000000UL TARGET = libasuro CC = avr-gcc.exe AR = avr-ar OBJDUMP = avr-objdump ## 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 -I./inc 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 ## Objects that must be built in order to link OBJECTS = globals.o adc.o adc_low.o encoder.o encoder_low.o i2c.o leds.o lcd.o\ motor.o motor_low.o my_motor_low.o print.o printf.o rc5.o sound.o switches.o\ time.o uart.o ultrasonic.o version.o ## Objects explicitly added by the user LINKONLYOBJECTS = # Define directories, if needed. DIRAVR = D:/ASURO/WinAVR #DIRAVR = /usr/local/avr DIRAVRBIN = $(DIRAVR)/bin DIRAVRUTILS = $(DIRAVR)/utils/bin DIRINC = $(DIRAVR)/avr/include DIRLIB = $(DIRAVR)/avr/lib LIB = asuro LIBFILE = $(TARGET).a HEADER = *.h ## Build all: $(LIBFILE) rm -rf *.o *~ %.o: %.c $(CC) $(INCLUDES) $(CFLAGS) -c $< $(LIBFILE): $(OBJECTS) $(AR) cru $(LIBFILE) $(OBJECTS) ## Clean target clean: rm -rf *.o *~ $(LIBFILE) rm -rf *.lst *.map $(EXTRA_CLEAN_FILES) rm -rf dep/*.d install: cp $(LIBFILE) $(DIRLIB)/$(LIBFILE) cp inc/$(HEADER) $(DIRINC) lst: $(OBJECTS:%.o=%.lst) %.lst: %.o $(OBJDUMP) -h -S $< > $@ ## Other dependencies -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
Der Optimist: \"Das Glas ist halb voll.\"
Der Pessimist: \"Das Glas ist halb leer.\"
Der Ingenieur: \"Das Glas ist doppelt so groß wie es sein müßte.\"
Lesezeichen