- Labornetzteil AliExpress         
Ergebnis 1 bis 7 von 7

Thema: Problem mit AVR Studio 4 - Fehler beim Compilieren

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272

    Problem mit AVR Studio 4 - Fehler beim Compilieren

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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.

    Code:
    /* 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:

    Code:
    make: *** No rule to make target `../main.c', needed by `main.o'.  Stop.
    DAs Makefile sieht folgender Maßen aus:

    Code:
    ###############################################################################
    # 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.
    Unser Wissen ist ein Tropfen, unser Unwissen ist wie ein Ozean.
    Sir Isaac Newton

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.03.2007
    Beiträge
    176
    Portb = 0xff; //Portb0 und Portb1 = High, Rest Low

    ist schon mal ein Widerspruch in sich FF ist nie 2 so und der Rest anders ...


    while(1)
    {
    //leere Schleife
    }

    geht eh nicht, leere oder while schleifen brauchen immer was, manchmal reicht ein ;, aber nicht wenn compiler optimierung on ist, so doof sind die compiler nicht, da wird die leere while auch leerer code, also sicherheitshalber immer dummy_var=0;

    @Roboter-Spezialist, hmm, der Code lässt nicht darauf schliessen

    scnr, dummer Scherz von mir nicht böse gemeint, helfe gerne wenn ich kann

    ich bin ja auch Neuling, 10 jahre nicht geproggt und seit einer Woche mit dem Atmel wieder angefangen

    hätte etwas code wenn du deine SW erst mal prüfst und in ordnung bringst hier noch mal richtig einstellst, dann prüfe ich den code bei mir und schick dir die makefiles

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272
    Ups, Tippfehler, sollte eigentlich heißen:

    Portb = 0x03

    Ich habe das Beispiel aus dem AVR-Tut abgeschrieben. ICh weiß, zu blöd zum tippen.

    Zu dem Fehler. Ich habe im netz jetzt soweit geforscht, dass es scheinbar an der Cygwin Datei von Windows liegt. Das ist ne Datei die es erlaubt Linux basierende Software in Windows zu laufen zu bewegen. Die wird aber von M$ nicht aktuallisiert. Werde deswegen mal ne neuere VErsion von der Cygwin einspielen. Mal shen was es bringt.

    Wegen dem Roboterspezialist: Ich habe wie hier geschrieben bisher in Bascom gearbeitet. Dort fand dich es nur ziehmlich umständlich wenn man I2C benutzt.
    Deswegen und weil ich denke das ich mit C mehr erreichen kann als in Basic jetzt der Umstieg auf C. Denke mal das ist man etwas näher an der Hardware und versteht einige achen die einem sonst Bascom abgenommen hat besser.

    Ausserdem kann ich mir diesen Rang nicht aussuchen, den gibt es einfach ab ne bestimmten anzahl von postings.

    cu arno
    Unser Wissen ist ein Tropfen, unser Unwissen ist wie ein Ozean.
    Sir Isaac Newton

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.03.2007
    Beiträge
    176
    Zitat Zitat von Olle_Filzlaus
    Zu dem Fehler. Ich habe im netz jetzt soweit geforscht, dass es scheinbar an der Cygwin Datei von Windows liegt. Das ist ne Datei die es erlaubt Linux basierende Software in Windows zu laufen zu bewegen. Die wird aber von M$ nicht aktuallisiert. Werde deswegen mal ne neuere VErsion von der Cygwin einspielen. Mal shen was es bringt.

    Wegen dem Roboterspezialist....Ausserdem kann ich mir diesen Rang nicht aussuchen, den gibt es einfach ab ne bestimmten anzahl von postings.
    cu arno
    ersteres ist eine gute Idee, immer die neuste und wenn möglich gleich win exe suchen

    letzteres weiss ich doch, war nur ein doofer scherz von mir

    ich mach ja auch reichlich fehler, z.b. var init vergessen, sucht man sich ein wolf....

    aber nun läuft meine HW und SW bald wie geplant

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272
    Hallo,

    naja, bei mir ist es das problem das ich auf arbeit nicht installieren darf. Ich muss rausbekommen warum das nett geht und dann muss ich das ändern. Wenn ich soweit bin gehe ich zu unseren Hardwareleuten, die sind nett aber ständig auf achse, und lasse das beheben.

    Deswegen der versuch das irgendwie ohne admin rechte hinzubekommen^^

    werde aber bescheid geben wenn ich den fehler habe, versuche das mal zu hause.

    thx Arno
    Unser Wissen ist ein Tropfen, unser Unwissen ist wie ein Ozean.
    Sir Isaac Newton

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272
    So, habe das zu hause mal getestet. Da läuft alles ohne Probleme.

    Ausser das mein Programm oben nicht geht.

    AVR Studio 4 hat wieder ne andere Syntac.

    Code:
    #include <avr/io.h>
    //#define F_CPU 8000000
    //#include <avr/delay.h>
    
    
    int main()
    {
    
    DDRB |= 0xff;	//Alle Pins als als Ausgänge setzen
    PORTB |= 0x03;	//Ausgänge setzen
    
    
    /*
    while(1)
       {
       nop
       } 
    */
              
    return 0;
    }
    thx arno

    Edit: Ok, das obere Programm geht auch. Habe gelesen das die Syntac geändert wurde, komisch
    Unser Wissen ist ein Tropfen, unser Unwissen ist wie ein Ozean.
    Sir Isaac Newton

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.11.2004
    Ort
    Karlsruhe
    Beiträge
    223
    also wenn das "nop" kein Makro ist (was es nicht sein sollte, weil Makros i.a. großgeschrieben werden) und das abschließende Semikolon enthält wird der Code so nicht funktionieren.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen