-         

Ergebnis 1 bis 6 von 6

Thema: Funktion in Lib auslagern

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    34

    Funktion in Lib auslagern

    Anzeige

    Servus,
    ich fange hier nochmal einen neuen Thread an, damit es in meinem andren nicht drunter und drüber geht.

    Und zwar gehts jetzt einfach nur darum eine einfache minifunktion, die einen Wert verdoppelt in die lib zu packen.

    Das test-programm funktioniert so wie ich mir das vorstelle wenn ich die funktion ganz normal im hauptprogramm auscodiere.

    Das hier ist das hauptprogramm wo ich die funktion (die in der lib sein soll) heraus aufrufe
    Code:
    #include "RP6ControlLib.h" 
    
    //int8_t getdoppel(int8_t pzahl1);
    int8_t zwischenergebnis,count;
    
    /*****************************************************************************/
    
    
    int16_t main(void)
    {
    	initRP6Control(); // Always call this first! The Processor will not work
    					  // correctly otherwise. 
    
    	initLCD(); 
    	
    
    	showScreenLCD("################", "################");
    
    	// Play a sound to indicate that our program starts:
    	sound(100,40,64);
    	sound(170,40,0);
    	mSleep(400);
    	setLEDs(0b0000);
    
    	showScreenLCD("lib test", "Example Program");
    	mSleep(1000);
    
    
    	zwischenergebnis = getdoppel (3);
    
    	uint8_t n = 0;	
    	while (n < zwischenergebnis){            //es sollte jetzt 6mal piepsen
    		mSleep (1000);
    		showScreenLCD("in der ", "Schleife");
    		sound(100,40,64);
    		n++;
    	} 
    	
    	return 0;
    }


    die funktion, habe ich hier in die library Roboter\RP6Examples\Eigene Programme\RP6Lib\RP6control\RP6ControlLib.c geschrieben
    int8_t getdoppel(int8_t pzahl1){
    int8_t ergebnis = pzahl1 *2;
    return ergebnis;
    }

    und in der headerdatei Roboter\RP6Examples\Eigene Programme\RP6Lib\RP6control\RP6ControlLib.h
    habe ich den funktionskopf bekanntgegeben
    Code:
    int8_t getdoppel(int8_t pzahl1)

    Allerdings gibt es wenn ich im Hauptprogramm "make all" mache einen Fehler, er kennt die funktion wohl noch nicht?
    Gibt es noch etwas auf das ich achten muss oder ich falsch gemacht habe?
    Bin wie gesagt in sachen Lib ein Neuling, sorry

    Das hier ist der Fehler:


    -------- 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: RP6Control_05_IO_ADC.c
    avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Control_05_IO_ADC.lst -I../../RP6lib -I../../RP6lib/RP6control -I../../RP6lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Control_05_IO_ADC.o.d RP6Control_05_IO_ADC.c -o RP6Control_05_IO_ADC.o
    RP6Control_05_IO_ADC.c: In function 'main':
    RP6Control_05_IO_ADC.c:31: warning: implicit declaration of function 'getdoppel'

    Linking: RP6Control_05_IO_ADC.elf
    avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Control_05_IO_ADC.o -I../../RP6lib -I../../RP6lib/RP6control -I../../RP6lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Control_05_IO_ADC.elf.d RP6Control_05_IO_ADC.o ../../RP6lib/RP6control/RP6ControlLib.o ../../RP6lib/RP6common/RP6uart.o ../../RP6lib/RP6common/RP6I2CmasterTWI.o --output RP6Control_05_IO_ADC.elf -Wl,-Map=RP6Control_05_IO_ADC.map,--cref -lm
    RP6Control_05_IO_ADC.o: In function `main':
    C:\Users\Andreas Martin\Documents\Roboter\RP6Examples\Eigene Programme\Versuch Lib/RP6Control_05_IO_ADC.c:31: undefined reference to `getdoppel'
    make: *** [RP6Control_05_IO_ADC.elf] Error 1

    > Process Exit Code: 2
    > Time Taken: 00:01

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Nach int8_t getdoppel(int8_t pzahl1) fehlt ein ; in RP6ControlLib.h?

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    34
    Zitat Zitat von radbruch
    Nach int8_t getdoppel(int8_t pzahl1) fehlt ein ; in RP6ControlLib.h?
    ist nur beim copy & paste verlorengegangen. ist also vorhanden.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    34
    Niemand eine Idee woran es liegen könnte?

    Bitte auch an alle Idiotiien denken die mir so passieren könnten. Danke

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo,

    ich kann es fehler- und warnungsfrei kompilieren. Hauptprogramm wie oben, Änderung in RP6ControlLib.c:
    Code:
    /*****************************************************************************/
    // Includes:
    
    #include "RP6ControlLib.h"
    
    int8_t getdoppel(int8_t pzahl1)
    {
    	int8_t ergebnis = pzahl1 *2;
    	return ergebnis;
    }
    
    
    /*****************************************************************************/
    Und in RP6ControlLib.h:
    Code:
    /*****************************************************************************/
    int8_t getdoppel(int8_t pzahl1);
    // Init:
    Ich glaube, bei Änderungen in den Library-Dateien muss man ein clean und dann ein make_all ausführen. Hast du vielleicht mehrere Kopien der Lib-Dateien in verschiedenen Verzeichnissen?

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    34
    AAHHHH.... da hätte man selbst drauf kommen können...

    Genau das war der Fehler, ich hatte die RP6Lib einmal kopiert zur Sicherheit. Ich dachte das Programm greift auf das Verzeichnis im selben Ordner (wo meine eigenen Programme sind) zu. Tatsächlich greift es wohl (warum auch immer) auf die Lib im übergeordneten Verzeichnis zu.

    Tja, so kanns gehen. Danke für die Hilfe. Meißtens hängt einfach an solchen simplen Sachen...

Berechtigungen

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