- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Undefined Reference... anscheinend keine Header-Files gefun.

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    30.05.2007
    Beiträge
    14

    Undefined Reference... anscheinend keine Header-Files gefun.

    Anzeige

    Powerstation Test
    Hi, bin Anfänger und habe ein Problem. Anscheinend werden keine Header-Files gefunden: Versuche folgendes zu kompilieren:

    Code:
    /*
     *  blink.c
     *  ATtiny2313 mit 1 MHz
     *  PORTB wird ueber ein Timer alle 0.263s ein- und ausgeschaltet. Das entspricht 3.81Hz
     */
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    
    SIGNAL (SIG_TIMER0_OVF)
    {
      PORTB =~ PORTB; // PORTB inventieren
    }
    
    int main()
    {
      DDRB  = 0xFF; // PORTB als Ausgang schalten
      PORTB = 0x00; // Alle Ausgaenge auf 0 schalten
    
      TCCR0B |= (1 << CS02) | (1 << CS00); //Prescaler auf 1024 stellen
      TIMSK  |= (1 << TOIE0);              // Timer 0 Overflow Interrupt enable
    
      sei(); // Interrupts einschalten
    
      for(;;); //ever
    }
    Ausgabe von Programmers-Notepad:

    Code:
    > "make.exe" all
    
    -------- begin --------
    avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
    Copyright (C) 2006 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: blink.c
    avr-gcc -c -mmcu=atmega32 -I. -gstabs   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=blink.lst  -std=gnu99 -Wp,-M,-MP,-MT,blink.o,-MF,.dep/blink.o.d blink.c -o blink.o 
    blink.c:11: warning: 'SIG_TIMER0_OVF' appears to be a misspelled signal handler
    blink.c:17: warning: function declaration isn't a prototype
    blink.c: In function 'main':
    blink.c:21: error: 'TCCR0B' undeclared (first use in this function)
    blink.c:21: error: (Each undeclared identifier is reported only once
    blink.c:21: error: for each function it appears in.)
    make.exe: *** [blink.o] Error 1
    
    > Process Exit Code: 2
    > Time Taken: 00:01

    Das gleiche bei anderen "simplen" Programmen. Wo nur outp() z.B. benutzt wird. Anscheinend werden die Header-Files nicht richtig gefunden.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    -- es heisst TCCR0 (ATmega32 hat kein TCCR0B)
    -- es heisst TIMER0_OVF_vect oder SIG_OVERFLOW0

    ähhh.. du willst nen ATtiny2313? dann musst du das avr-gcc auch sagen (bzw ihm über's Makefile sagen lassen). Momentan übersetzt du für ATmega32.

    Für die Namen von SFRs/ISRs guckst du

    <GCC_INSTALL_DIR>/avr/include/avr/iom32.h (für ATmega32)
    <GCC_INSTALL_DIR>/avr/include/avr/iotn2313.h (für ATtiny2313)
    Disclaimer: none. Sue me.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    30.05.2007
    Beiträge
    14
    Ok ich probiers mal aus. [Edit] Hat funktioniert, Danke! [/EDIT]

    Was sollte ich denn als erstes machen, um voll hinter die ganzen Möglichkeiten durchzusteigen? Wo finde ich eine Übersicht aller Funktionen in C, die ich vorgegeben habe?

    Und was ist an folgendem Code falsch?

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    
    int main (void)
    {
    	outp(0xFE,DDRA); //PortA: Pin0: Input, Pin1..7: Output
    	outp(0xFF,PORTA); //PortA: Pin0: pull up, Pin1..7: high = LED off
    	
    	while(1)
    	{
    		if(bit_is_set (PINA,0)) //check if PinA0 is high
    		{
    			cbi(PORTA,1); //clear PinA1 = LED on
    		}
    		else
    		{
    			sbi(PORTA,1); //set PinA1 = LED off
    		}
    	}
    }
    Ausgabe:

    Code:
    -------- begin --------
    avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
    Copyright (C) 2006 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: test.c
    avr-gcc -c -mmcu=atmega32 -I. -gstabs   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test.lst  -std=gnu99 -Wp,-M,-MP,-MT,test.o,-MF,.dep/test.o.d test.c -o test.o 
    test.c: In function 'main':
    test.c:5: warning: implicit declaration of function 'outp'
    test.c:12: warning: implicit declaration of function 'cbi'
    test.c:16: warning: implicit declaration of function 'sbi'
    
    Linking: test.elf
    avr-gcc -mmcu=atmega32 -I. -gstabs   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test.o  -std=gnu99 -Wp,-M,-MP,-MT,test.o,-MF,.dep/test.elf.d test.o   --output test.elf -Wl,-Map=test.map,--cref    -lm
    test.o: In function `main':
    test.c:5: undefined reference to `outp'
    test.c:6: undefined reference to `outp'
    test.c:12: undefined reference to `cbi'
    test.c:16: undefined reference to `sbi'
    make.exe: *** [test.elf] Error 1
    
    > Process Exit Code: 2
    > Time Taken: 00:00

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Was ist an folgendem Code falsch?
    1. #include <avr/signal.h> ist veraltet
    2. outp(0xFE,DDRA); ist veraltet
    3. cbi(PORTA,1); ist veraltet
    4. sbi(PORTA,1); ist veraltet
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    (Siehe mein Beitrag oben, hab ich nacheditiert)

    Du verwendest alte Makros, die zu einer alten avr-gcc-Version gehören.

    In der 4.x gibt's diese Makros AFAIK net mehr
    --> selber nachdefinieren oder wie's alle Welt macht werden Bits gesetzt/gelöscht durch Standard-C-Konstrukte.
    --> signal.h braucht's auch net mehr, die Makros sind jetzt in interrupt.h
    Disclaimer: none. Sue me.

Berechtigungen

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

Solar Speicher und Akkus Tests