... nicht nur das Compilieren geht dort, sondern sogar das Linken!![]()
also ich soll mit den studio mein programm schreiben und da auch compilieren??? geht das???
... nicht nur das Compilieren geht dort, sondern sogar das Linken!![]()
woher bekommt man den die avrgccplugin.exe???
Das ist im AVR Studio bereits integriert. Also einfach AVR Studio Version 4.13 kostenlos bei Atmel downloaden und installieren. Neues Projekt eröffnen, Pfade zu includes und libs einstellen, Compiler-/Linker-Flags setzen (z.B. -Os) und loslegen.
AvrPluginavrgccplugin.dll
avrgccplugin.xml
avrgccpluginhelp.chm
im Pfad C:\Programme\Atmel\AVR Tools
also ich habe jetzt einfach mal unter den Projektoptionen unter include directories
AsuroLib-v270rc3\lib
hinzugefügt
und dann die libraries libsauro.a... hinzugefügt.
war es das schon, was man machen muss. wenn ich nämlich auf compilieren drücke, dann erstellt er mir einen hex file.
er sagt zwar:
Build succeeded with 7 Warnings...
aber es wird keine hex datei erstellt
Na immerhin, Du kommst voran und siehst, dass man mit AVR Studio arbeiten kann. Jetzt musst Du noch die Pfade für Header und Bibliotheken korrekt einbinden.also ich habe jetzt einfach mal unter den Projektoptionen unter include directories AsuroLib-v270rc3\lib hinzugefügt
Bitte nicht include (inc) und library (lib) verwechseln. Im einen sind die Header, also z.B. asuro.h, und im anderen die (statischen) Bibliotheken, also z.B. libasuro.a.
Bei mir (Pfade bei Dir anpassen):
Header: C:\ASURO_SRC\AsuroLib\lib\inc bzw. C:\WinAVR\avr\include
Bibliothek: C:\ASURO_SRC\AsuroLib\lib bzw. C:\WinAVR\avr\lib
Ganz wichtig ist es noch, die asuro.c im AVR Studio unter AVR GCC bei den "Source Files" hinzuzufügen, da diese Datei in der libasuro.a nicht mit dabei ist, damit man in asuro.c im Projekt Änderungen durchführen kann.
Du musst also immer genau zwischen drei Typen unterscheiden:
1) Header-Dateien (Header)
2) Bibliotheken (Libraries)
3) Source Files (Implementations-Dateien, Sources)
Bei mir werden z.B. im Zielverzeichnis C:\ASURO_SRC\Projekte\ASURO_001\default die beiden Objekt-Dateien asuro.o und asuro_001.o mit der (statischen) Bibliothek libasuro.a zu der im ATmega8L lauffähigen Binärdatei asuro_001.hex gelinkt (=zusammen gebunden).
Das schaffst Du auch!
Testprogramm:
Output: asuro_001.hex mit 3965 Bytes.Code:#include "asuro.h" int main() { Init(); int i=0; for (i=0;i<100;++i) { BackLED (OFF, ON); Msleep(200); BackLED (ON, OFF); Msleep(200); } BackLED (OFF, OFF); while (1); //ansonsten endlos return 0; //wird nicht erreicht }
Jetzt musst Du nur noch auf die Compiler Flags achten, die muss man beim AVR Studio manuell hinzufügen.
Vergleich zweier MakeFiles in diesem Bereich:
Beispiel FirstTry:
OPT = s
CFLAGS = -g -O$(OPT) -I../../lib/inc\
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-ahlms=$(<:.c=.lst)
Beispiel ASURO_001:
COMMON = -mmcu=$(MCU)
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -DF_CPU=8000000UL -Os -fsigned-char
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
Besonders wichtig ist die Optimierung -Os
ich habe die libs und die incs hinnzugefügt. wo kann ich die source files hinzufügen???
mein Programm sieht bis jetzt so aus:
wenn ich es compiliere bringt er mir einige fehler:Code:#include "asuro.h" void Sleep3ms(short b); int main(void) { Init(); while(1){ if(PollSwitch()!=0) { SerPrint("Achtung\n"); if(PollSwitch()>7){//links SetMotorPower (0,0); Sleep3MS(50); SetMotorPower (0,-100); Sleep3MS(200); SetMotorPower (100,100); } else{//rechts SetMotorPower (0,0); Sleep3MS(50); SetMotorPower (-100,0); Sleep3MS(200); SetMotorPower (100,100); } } else{ SetMotorPower (100,100); Sleep3MS(30); } } } void Sleep3MS(short b){ short t; for(t=0;t<=b;t++){ Sleep(216); } }
am schluss wird aber ausgegeben, dass die compilierung erflogreich war:Code:../TestProjekt.c:10: warning: pointer targets in passing argument 1 of 'SerPrint' differ in signedness ../TestProjekt.c:13: warning: implicit declaration of function 'Sleep3MS' ../TestProjekt.c:36: warning: conflicting types for 'Sleep3MS' ../TestProjekt.c:13: warning: previous implicit declaration of 'Sleep3MS' was here
Build succeeded with 4 Warnings...
aber ein hex-file wird nicht erstellt.
in deinem beispielprogramm gibt er keine fehler aus, aber erstellt auch da keinen hex-file
Na, super!ich habe die libs und die incs hinzugefügt
OK, das geht an einer anderen Stelle, nämlich in der Projektübersicht, in der die beteiligten Files angezeigt werden.wo kann ich die source files hinzufügen?
Das findest Du im Menü bei View - Toolbars - AVR GCC !
Danach klickst Du auf den Stierkopf, dann Rechtsklick auf das Ordnersymbol "Source Files" und "Add Existing Source File(s)". Da gibst Du asuro.c und Deine sonstigen Source-Files (aber nicht die, die bereits in libasuro.a verarbeitet sind! Siehe unten.) hinzu, die Du benötigst. Probiere bitte alles aus, was dieses Menü "View - Toolbars" enthält, damit Du Dich da auskennst. Die hex-Datei landete dann im Projekt-Ordner unter default (Pfad kannst Du unter General bei Output File Directory ändern).
Files in libasuro.a, Auszug aus entsprechendem MakeFile:
Diese Source-Files (im MakeFile sind für den Linker die Object-Files aufgeführt, die der Compiler vor dem Linken aus den Sources xxx.c erzeugt hat) müssen nicht mehr in den Ordner "Source File(s)" hinzu, sonst füllt man den Flash-Speicher völlig sinnlos voll!Code:OBJECTS = globals.o adc.o encoder.o encoder_low.o i2c.o leds.o lcd.o\ motor.o motor_low.o print.o rc5.o sound.o switches.o\ time.o uart.o version.o
also ich denke mal, dass du mit dem asuro.c file den asuro file unter
C:\...\Asuro lib\AsuroLib-v270rc3\lib
meinst.
den habe ich hinzugefügt, so dass unter "Source Files" nun
001.c
asuro.c
und
TestProjekt.c
aufgelistet ist.
unter External Dependencies ist zu finden:
asuro.h
interrupt.h
inttypes.h
io.h
iom8.h
libasuro.a
libasuro.a
libc.a
libm.a
libprintf_flt.a
...
und noch ein paar andere h dateien mit unidentifizierbarem namen
der outputFileName ist program.hex in directory default.
auch ein häckchen ist bei Create Hex File gesetzt.
im Makefile unter dafault dteht nun:
Code:############################################################################### # Makefile for the project TestProjekt ############################################################################### ## General Flags PROJECT = TestProjekt MCU = atmega8 TARGET = program.hex 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 -Os -fsigned-char 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 += ## 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 --no-change-warnings ## Include Directories INCLUDES = -I"C:\Users\michael\Asuro\Workspace\eigener test\TestProjekt\..\..\..\Asuro lib\AsuroLib-v270rc3\lib\inc" -I"C:\Users\michael\Asuro\Workspace\eigener test\TestProjekt\..\..\..\..\..\..\WinAVR\avr\include" ## Library Directories LIBDIRS = -L"C:\Users\michael\Asuro\Asuro lib\AsuroLib-v270rc3\lib" -L"C:\WinAVR\avr\lib" ## Libraries LIBS = -lasuro -lc -lm -lprintf_flt -lprintf_min -lscanf_flt -lscanf_min -lasuro -lc -lm -lprintf_flt -lprintf_min -lscanf_flt -lscanf_min -lasuro -lasuro -lc -lm -lprintf_flt -lprintf_min -lscanf_flt -lscanf_min ## Objects that must be built in order to link OBJECTS = TestProjekt.o 001.o asuro.o ## Objects explicitly added by the user LINKONLYOBJECTS = "crt86401.o" "crtc8534.o" "crts1200.o" "crts2313.o" "crts2323.o" "crts2333.o" "crts2343.o" "crts4414.o" "crts4433.o" "crts4434.o" "crts8515.o" "crts8535.o" "crttn11.o" "crttn12.o" "crttn13.o" "crttn15.o" "crttn22.o" "crttn2313.o" "crttn24.o" "crttn25.o" "crttn26.o" "crttn261.o" "crttn28.o" "crttn44.o" "crttn45.o" "crttn461.o" "crttn84.o" "crttn85.o" "crttn861.o" "crt86401.o" "crtc8534.o" "crts1200.o" "crts2313.o" "crts2323.o" "crts2333.o" "crts2343.o" "crts4414.o" "crts4433.o" "crts4434.o" "crts8515.o" "crts8535.o" "crttn11.o" "crttn12.o" "crttn13.o" "crttn15.o" "crttn22.o" "crttn2313.o" "crttn24.o" "crttn25.o" "crttn26.o" "crttn261.o" "crttn28.o" "crttn44.o" "crttn45.o" "crttn461.o" "crttn84.o" "crttn85.o" "crttn861.o" ## Build all: $(TARGET) program.hex program.eep size ## Compile TestProjekt.o: ../TestProjekt.c $(CC) $(INCLUDES) $(CFLAGS) -c $< 001.o: ../001.c $(CC) $(INCLUDES) $(CFLAGS) -c $< asuro.o: ../../../../Asuro lib/AsuroLib-v270rc3/lib/asuro.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 $< > $@ size: ${TARGET} @echo @avr-size -C --mcu=${MCU} ${TARGET} ## Clean target .PHONY: clean clean: -rm -rf $(OBJECTS) program.hex dep/* program.hex program.eep ## Other dependencies -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
aber eine hex wird immer noch nicht erzeugt. auch die warnungen erscheinen bei meinem testprogramm immer noch.
habe ich irgend etwas vergessen???
Vergessen - das erscheint mir etwas überfüllt. Ich zeige Dir mal mein MakeFile des AVR Studio für das ASURO-Projekt:
z.B.:Code:############################################################################### # Makefile for the project ASURO_001 ############################################################################### ## General Flags PROJECT = ASURO_001 MCU = atmega8 TARGET = ASURO_001.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 -Os -fsigned-char 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=ASURO_001.map ## 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 --no-change-warnings ## Include Directories INCLUDES = -I"C:\ASURO_SRC\Projekte\ASURO_001\..\..\AsuroLib\lib\inc" ## Libraries LIBS = -lasuro ## Objects that must be built in order to link OBJECTS = ASURO_001.o asuro.o ## Objects explicitly added by the user LINKONLYOBJECTS = ## Build all: $(TARGET) ASURO_001.hex ASURO_001.eep ASURO_001.lss size ## Compile ASURO_001.o: ../ASURO_001.c $(CC) $(INCLUDES) $(CFLAGS) -c $< asuro.o: ../../../AsuroLib/lib/asuro.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 $< > $@ size: ${TARGET} @echo @avr-size -C --mcu=${MCU} ${TARGET} ## Clean target .PHONY: clean clean: -rm -rf $(OBJECTS) ASURO_001.elf dep/* ASURO_001.hex ASURO_001.eep ASURO_001.lss ASURO_001.map ## Other dependencies -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
## Libraries
LIBS = -lasuro
... und dann diese ganzen Objektdateien "crt86401.o" "crtc8534.o" ....
Du linkst ja Deinen ganzen Computer in den winzigen ASURO.
Das Programm ist wahrscheinlich so groß, dass es nicht in den ATmega8 passt. Abrüsten ist bei Dir angesagt!
Sieh das ganze positiv! Du liest MakeFiles (können die wenigsten) und arbeitest bereits mit dem Atmel AVR Studio. Jetzt musst Du nur noch die Fehlermeldungen verstehen lernen. Wirf mal den ganzen Müll raus.
Lesezeichen