- 3D-Druck Einstieg und Tipps         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Fehler in WinAVR - Makefile?

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624

    Fehler in WinAVR - Makefile?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Guten Abend allerseits!
    Nun ja, ich bin gestern mit Hilfe des Asuros von Assembler auf C umgestiegen! ;o) *ASM-Fans verzeiht mir meinen Seitensprung*
    Nun möchte ich nicht nur den Mega8 des Asuros programmieren, sondern auch meine eigenen Platinen, um den richtigen Einsatz zu testen.
    Ich nehme an, dass ich die sog. Makefile des Asuros nicht weiter verwenden kann, da ich ja nicht nur den M8 und nicht z.B. den M16 programmieren könnte.
    Ich arbeitete dann mit dem Einstiegs-Tutorial von http://www.kreatives-chaos.com/index...eite=avrgcc_pn und machte mir mit Mfile eine eigene Makefile für den ATMega8.
    Ich machte mir einen neuen Ordner namens Test auf dem Desktop und schob die Makefile dort hinein.
    Danach kopierte ich spasseshalber den Code von http://www.kreatives-chaos.com/index.php?seite=avr_b in das "Programmers Notepad" und speicherte die Datei unter test.c in dem Ordner ab.
    Als ich dann das Programm compilierte ("[WinAVR] Make All") kam folgende Meldung:
    Code:
    > "make.exe" all
    
    -------- begin --------
    avr-gcc (GCC) 3.4.5
    Copyright (C) 2004 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    make.exe: *** No rule to make target `main.o', needed by `main.elf'.  Stop.
    
    > Process Exit Code: 2
    > Time Taken: 00:00
    Könnt ihr vielleicht einem kleinen, dummen Assembler-Programmierer, der von WinAVR keine Ahnung hat, helfen!? *lol*

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    Im makefile legt man ja auch den Namen der c-Dateien fest. Wenn deine c-DAtei test.c heißt, musst du das auch ins makefile schreiben. In diesem Fall war main.c eingestellt. Da du WinAVR verwendest, kannst du auch das Programm mfile verwenden, um deine makefiles zu erzeugen. Da kann man ganz gut die verschiedenen Einstellungen ändern.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hallo Pascal!
    Ich benutze bereits das Mfile-Programm! :o)
    Jetzt scheint es zu funktionieren, Dankeschön!

    Mich wundert nur eins:
    > "make.exe" all

    -------- begin --------
    avr-gcc (GCC) 3.4.5
    Copyright (C) 2004 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


    Compiling: main.c
    avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst -std=gnu99 -MD -MP -MF .dep/main.o.d main.c -o main.o
    main.c:50:2: warning: no newline at end of file
    main.c: In function `main':
    main.c:10: warning: 'i' might be used uninitialized in this function

    Linking: main.elf
    avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=gnu99 -MD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref -lm

    Creating load file for Flash: main.hex
    avr-objcopy -O ihex -R .eeprom main.elf main.hex

    Creating load file for EEPROM: main.eep
    avr-objcopy -j .eeprom --set-section-flags .eeprom=alloc,load \
    --change-section-lma .eeprom=0 -O ihex main.elf main.eep

    Creating Extended Listing: main.lss
    avr-objdump -h -S main.elf > main.lss

    Creating Symbol Table: main.sym
    avr-nm -n main.elf > main.sym

    Size after:
    AVR Memory Usage
    ----------------
    Device: atmega8

    Program: 144 bytes (1.8% Full)
    (.text + .data + .bootloader)

    Data: 0 bytes (0.0% Full)
    (.data + .bss + .noinit)



    -------- end --------


    > Process Exit Code: 0
    > Time Taken: 00:01
    Warum warnt mich der Compiler vor den rot markierten Dingen?
    Vor allem der zweite Fehler, das soll das?
    i ist doch vernünftig definiert worden!

    Danke nochmal für die Hilfe! :o)

    Viele Grüße
    Florian

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Florian,
    die erste Warnung ist wohl klar, oder ?
    Mach mal Newline am ende und gut ist.
    und für die zweite,postest Du am besten Dein Programm.

    Gruß Sebastian

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hallo Sebastian!
    die erste Warnung ist wohl klar, oder ?
    Warum braucht der Compiler denn eine Leerzeile? ;o)
    Nagut, das ist jetzt geklärt!

    und für die zweite,postest Du am besten Dein Programm.
    Das ist von http://www.kreatives-chaos.com/index.php?seite=avr_b .
    Möchte der Compiler, dass ich dem Markierten (>>> unsigned char i; <<<) erst einen Wert zuweise, oder einfach nur, dass ich es hinter das Init(); stelle?

    Code:
    #include <avr/io.h>
    
    #define SYSCLK 7372800
    
    void init(void);
    void delay_ms(unsigned int ms);
    
    int main(void)
    {
    	>>> unsigned char i; <<<	
    
    	init();	
    	
    	// Endlosschleife
    	while (1)
    
    	{
    		PORTB = i;
    		i++;
    		
    		delay_ms(1000);
    	}	
    
    	return 0;
    }
    
    // Initialisierung
    void init(void)
    {
    	DDRB = 0xff;	// PortB als Ausgang deklarieren
    	PORTB = 0x00;	// Ports auf LOW schalten
    }
    
    // Delay Routine
    void delay_ms(unsigned int ms)
    {
    	unsigned int zaehler;
    	
    	while (ms)
    	{
    		zaehler = SYSCLK / 5000;
    		
    		while (zaehler)
    		{
    			asm volatile ("nop");
    			zaehler--;
    		}
    		ms--;
    	}
    }

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    Hi Flori!

    Da hast dir ja einen peniblen Compiler gefangen...

    Die erste Warnung kannst du getrost übergehen, das ist nur Formsache.
    (Diene Programme funzen auch ohne...)

    Anscheinen will dein Compiler die Variable initialisiert haben. Das geht so:

    unsigned char i = 0; oder unsigned char i = ""; kommt drauf an, ob der Compiler das mag oder nicht.

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hi Tobi!
    Jetzt funktionierts! ;o)
    Mal sehn, was ich als erstes programmiere ...

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Ist doch klar, du deklarierst i, i hat aber hier noch keinen Wert, ist nur deklariert, und ein paar Zeilen tiefer setzt Du PORTB auf "i" , klingelt's?
    entweder weist Du i direkt einen Wert zu :
    unsigned char i= 0;

    später irgendwo im Programm
    i= 0;

    Gruß Sebastian

    P.S. zu lange getippelt.....

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Ok, Danke ... ;o)

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.11.2005
    Beiträge
    321
    ...Da hast dir ja einen peniblen Compiler gefangen...

    das ist winavr-c.
    die warnungen sind korrekt. wenn man genau liest, erkennt man das es warnungen sind , die den programmablauf zur hexdatei nicht unterbrechen und auch die hexdatei korrekt erstellen.
    die warnungen sind gegen die vergesslichkeit der programmierer gemacht worden.
    wenn man c proggen tut, darf man nicht mehr schludern wie in basic. hier wird eine korrekte, nicht eine pennible programmierweise verlangt, was auch sicherlich dazu beiträgt fehler besser zu lokalisieren und einen einwandfreine ablauf im avr-studio zu gewährleisten. winavr-c und avrstudio gehören zusammen wie mutter und kind.
    die basicprogger tun sich sehr schwer mit c, weil jede kleine struktur ausgetüftelt werden muss. wer c kennt, weiss, das es ungefähr nur 30 grundbegriffe gibt und das andere sind eigentlich nur noch daraus erstellte routinen.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress