- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: undefined reference to...

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2010
    Ort
    Löhne
    Alter
    33
    Beiträge
    17

    undefined reference to...

    Anzeige

    E-Bike
    Hallo erstmal.
    ich habe vor kurzem mit der AVR programmierung angefangen
    (AVR Studio V4.14 Build 589 + WinAVR-20100110)


    ich habe Google schon dazu befragt aber keine lösung gefunden.
    ich habe das beispielprogramm des RN-Control Boards mit der UART LIB von Peter Fleury erweitert und seit dem bekomme ich folgende Fehlermeldungen.

    Code:
    rm -rf RNControl-Test.o uart.o  RN-Control_mod.elf dep/* RN-Control_mod.hex RN-Control_mod.eep RN-Control_mod.lss RN-Control_mod.map
    Build succeeded with 0 Warnings...
    avr-gcc.exe  -mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MF../default/uart.o -MD -MP -MT RNControl_mod.o -MF dep/RNControl_mod.o.d  -c  ../RNControl_mod.C
    cc1plus.exe: warning: command line option "-std=gnu99" is valid for C/ObjC but not for C++
    avr-gcc.exe  -mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MF../default/uart.o -MD -MP -MT uart.o -MF dep/uart.o.d  -c  ../uart.c
    avr-gcc.exe -mmcu=atmega32 -Wl,-Map=RN-Control_mod.map RNControl_mod.o uart.o   -L"D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default"   -o RN-Control_mod.elf
    RNControl_mod.o: In function `Digitalwerte()':
    D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:176: undefined reference to `uart_puts(char const*)'
    D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:176: undefined reference to `uart_puts(char const*)'
    D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:176: undefined reference to `uart_puts(char const*)'
    D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:177: undefined reference to `uart_puts(char const*)'
    D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:178: undefined reference to `uart_puts(char const*)'
    RNControl_mod.o:D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:181: more undefined references to `uart_puts(char const*)' follow
    RNControl_mod.o: In function `main':
    D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:206: undefined reference to `uart_init(unsigned int)'
    D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:222: undefined reference to `uart_puts(char const*)'
    D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:223: undefined reference to `uart_puts(char const*)'
    D:\Elektronik Projekte\AVR\AVR GCC\RN-Control_mod\default/../RNControl_mod.C:224: undefined reference to `uart_puts(char const*)'
    make: *** [RN-Control_mod.elf] Error 1
    Build failed with 10 errors and 1 warnings...
    danke schonmal an alle die mir helfen können

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Sieht so aus als hättest du die uart.h nicht eingebunden.
    Zeig mal dein ganzes Programm, dann kann man besser urteilen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2010
    Ort
    Löhne
    Alter
    33
    Beiträge
    17
    doch ist drin.

    Code:
    /*
    ###################################################
    RNControl-Test.c
    
    Aufgabe:
     Dieses Testprogramm testet gleich mehrere Eigenschaften auf dem Board
     Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
     Taste 1: Zeigt Batteriespannung über RS232 an
     Taste 2: Angeschlossene Motoren beschleunigen und abbremsen
     Taste 3: Einige Male Lauflicht über LED´s anzeigen. Am I2C-Bus
              darf in diesem Moment nichts angeschlossen sein
     Taste 4: Zeigt analoge Messwerte an allen Port A PIN´s über RS232 an
     Taste 5: Zeigt digitalen I/O Zustand von PA0 bis PA5 an
    
    
     Sehr gut kann man aus dem Demo auch entnehmen wie Sound ausgegeben wird,
     wie Tasten abgefragt werden und wie Subroutinen und Funktionen angelegt werden
    
    Autor: Georg Richter
    #######################################################
    */
    #ifndef F_CPU
    #define F_CPU				16000000L
    #endif
    
    #define 	UART_RX_BUFFER_SIZE   64
    #define 	UART_TX_BUFFER_SIZE   64
    
    
    #include <stdlib.h> 
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include "rncontrol.h"
    #include "uart.h"
    
    
    
    
    
    /*### Variablen ###*/
    const float referenzspannung = 0.0048828125;	//Referenzwert zur Multiplikation mit den Werten der Analogports (0...1023), um auf die Voltzahl zu kommen (0...5). Ergibt sich aus 5/1024.
    uint16_t analog; //Variable für jeweils an einem Analogport gemessenen Wert, um nicht für eine Ausgabe mehrere Messungen durchführen zu müssen.
    char wort[5];	//Zahlen (Integer und Float) müssen vor der Ausgabe per RS232 in ASCII-Zeichen konvertiert werden, für die ein Speicher benötigt wird.
    
    
    
    
    
    /*### Batteriespannung ###*/
    void Batteriespannung(void)
    {
    	uart_puts("Analog6 = "); analog = adcwert(6);
    	utoa(analog, wort, 10);	uart_puts(wort); uart_puts(" = ");
    	dtostrf(analog*referenzspannung, 11, 8, wort);	uart_puts(wort); uart_puts(" Volt\r\n");
    	dtostrf(adcwert(6)*referenzspannung*5.66804, 11, 8, wort);
    	uart_puts("Batteriespannung = "); uart_puts(wort); uart_puts(" Volt\r\n\n\n\n");
    	waitms(300);
    }
    
    
    
    
    
    /*### Motortest ###*/
    void Motortest(void)
    {
    	Mlinksvor();
    	Mrechtsvor();
    
    	setPWMlinks(0);
    	setPWMrechts(0);
    	waitms(40);
    
    	for(uint8_t i=0; i<255; i=i+5)
    	{
    		setPWMlinks(i);
    		setPWMrechts(i);
    		waitms(40);
    	}
    
    	setPWMlinks(255);
    	setPWMrechts(255);
    	waitms(40);
    
    	for(uint8_t i=255; i>0; i=i-5)
    	{
    		setPWMlinks(i);
    		setPWMrechts(i);
    		waitms(40);
    	}
    
    	setPWMlinks(0);
    	setPWMrechts(0);
    
    	Mlinksstop();
    	Mrechtsstop();
    	waitms(300);
    }
    
    
    
    
    
    /*### LED-Lauflicht ###*/
    void Lauflicht(void)
    {
    	for(uint8_t i=0; i<10; i++)
    	{
    	setportcoff(0);
    	waitms(150);
    	setportcon(0);
    	setportcoff(1);
    	waitms(150);
    	setportcon(1);
    	setportcoff(2);
    	waitms(150);
    	setportcon(2);
    	setportcoff(3);
    	waitms(150);
    	setportcon(3);
    	setportcoff(4);
    	waitms(150);
    	setportcon(4);
    	setportcoff(5);
    	waitms(150);
    	setportcon(5);
    	waitms(300);
    	}
    }
    
    
    
    
    
    /*### Analogwerte ###*/
    void Analogwerte(void)
    {
    	//Alle internen Pullups an, ausgenommen Port A3 und Batteriespannung/Taster (A6 und A7). Da A3 aber nun auch nicht auf GND liegt, ergibt sich ein "Rauschen", der Wert variiert mit jeder Messung mehr oder weniger stark.
    	setportaon(0);
    	setportaon(1);
    	setportaon(2);
    	setportaoff(3);
    	setportaon(4);
    	setportaon(5);
    	
    	for(uint8_t i=0; i<8; i++)
    	{
    		analog = adcwert(i);	//Messung Analogport [i]
    		utoa(i, wort, 10); uart_puts("Analog"); uart_puts(wort); uart_puts(" = "); //Ausgabe: "Analog[i] = "
    		utoa(analog, wort, 10);	uart_puts(wort); uart_puts(" = "); //Ausgabe: "[Analogwert] = "
    		dtostrf(analog*referenzspannung, 11, 8, wort);	uart_puts(wort); uart_puts(" Volt\r\n"); //Ausgabe: "[Reale Voltzahl] Volt[Umbruch]"
    	}
    	
    	uart_puts("\n\n\n");
    	waitms(300);
    }
    
    
    
    
    
    /*### Digitalwerte ###*/
    void Digitalwerte(void)
    {
    	//Einige interne Pullups an, andere aus -> gibt bei einigen "Rauscheffekt", mal misst er "high", mal "low" und mal irgendwas dazwischen "?".
    	//Ein kleines Stückchen Draht an einem der Ports wirkt wahre Wunder, was das Rauschen betrifft -> viel öfter "low" dabei als ohne. Nachteil: Die Tastenerkennung funktioniert kaum noch.
    	setportaoff(0);
    	setportaon(1);
    	setportaoff(2);
    	setportaon(3);
    	setportaon(4);
    	setportaon(5);
    	
    	for(uint8_t i=0; i<8; i++)
    	{
    		utoa(i, wort, 10); uart_puts("Digital"); uart_puts(wort); uart_puts(" = ");	//Ausgabe: "Digital[i] = "
    		if (PINA & (1<<i)) {uart_puts("high");} else {uart_puts("low");}	//Abgleich des Zustandes - Ausgabe: "high" oder "low"
    		uart_puts("\r\n");
    	}
    	
    	uart_puts("\n\n\n");
    	waitms(300);
    }
    
    
    
    
    
    /*### Hauptschleife ###*/
    int main(void)
    {
    
    	/*###Initialisierungsphase###*/
    
    	//Pins bzw. Ports als Ein-/Ausgänge konfigurieren
    	DDRA |= 0x00;	//00000000 -> alle Analogports als Eingänge
    	DDRB |= 0x03;	//00000011 -> PORTB.0 und PORTB.1 sind Kanäle des rechten Motors
    	DDRC |= 0xFF;	//11111111 -> PORTC.6 und PORTC.7 sind Kanäle des linken Motors, Rest sind LEDs für Lauflicht
    	DDRD |= 0xB0;	//10110000 -> PORTD.4 ist PWM-Kanal des linken Motors, PORTD.5 des rechten
    	
    	//Initialisierungen
    	setportcon(0); setportcon(1); setportcon(2); setportcon(3); setportcon(4); setportcon(5); //LEDs ausschalten
    	setportdoff(7);	//Speaker aus
    	init_timer1();	//Initialisierung Timer für PWM
    
    	uart_init( UART_BAUD_SELECT(9600,F_CPU)); 
        sei();
    	
    
    
    
    
    	/*###Hauptschleife###*/
    	sound(6, 270); //Startmelodie
    	sound(8, 270);
    	sound(11, 270);
    	sound(7, 270);
    	waitms(10);
    	sound(7, 270);
    	sound(6, 270);
    	sound(11, 540);
    	uart_puts("\r\n\n\n"); //Sendet einen kleinen Begrüßungstext. "\r" setzt den Cursor wieder auf Zeilenanfag, "\n" beginnt dann die nächste Zeile
    	uart_puts("**** RN-Control 1.4 *****\r\n");
    	uart_puts(" \r\n");
    
    
    
    	Mlinksstop();
    	Mrechtsstop();
    
    
    	setPWMlinks(0);
    	setPWMrechts(0);
    
    
    	while(1)
    	{
    		switch(button())
    		{
    			case 1: Batteriespannung(); break;
    			case 2: Motortest(); break;
    			case 3: Lauflicht(); break;
    			case 4: Analogwerte(); break;
    			case 5: Digitalwerte(); break;
    			default: break;
    		}
    	}
    	
    	
    	return 0;
    }

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Die uart.c und uart.h sind auch im selben Verzeichnis wie das RN_Control_mod.c
    Und im AVr-Studio ist es auch in der Source und Headerfiles aktiviert.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2010
    Ort
    Löhne
    Alter
    33
    Beiträge
    17
    Ja

    sind im gleichen verzeichnis und auch im AVR studio aktiviert.
    das ist ja das was mich so wundert.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Vielleicht das AVR-Studio aktualisieren, aktuell ist 4.18
    Kann es jetzt nicht testen, muss weg.
    Wenn ich zeit habe probiere ich es am Abend aus.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Du hast das 'extern "C"' vergessen.

    Edit:
    Ach, ich sehe gerade, dass du wahrscheinlich gar nicht in C++ programmieren wolltest. In dem Fall hast du der Datei die falsche Endung gegeben. Es muss ein kleines c sein. Großes C = C++ Source.
    MfG
    Stefan

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Bei mir lässt sich das ganze bis auf ein Warnig compilieren.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2010
    Ort
    Löhne
    Alter
    33
    Beiträge
    17
    bin gerade dabei AVR studio zu aktualisieren. das mit der Datei endung werde ich korrigieren.

    vielen dank für die schnellen und vielen antworten. also wird es wohl nicht am code liegen, sondern an der toolchain (compiler/linker) vielleicht stimmen da einstellungen nicht.
    werde es gleich mal testen.

  10. #10
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von lineage
    also wird es wohl nicht am code liegen, sondern an der toolchain (compiler/linker) vielleicht stimmen da einstellungen nicht.
    Nein. Es liegt einzig und allein an dem großen C als Dateiendung.
    MfG
    Stefan

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

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

12V Akku bauen