PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : undefined reference to `setLEDs'



Vicinzu
21.04.2008, 23:02
Habe heute den RP6 gekauft um die Grundlagen zu lernernen,
aber beim sogar beim compilieren der beispiele bekomme ich diesen fehler:

Compiling: RP6Base_LEDs.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Base_LEDs.lst -I../../RP6Lib -I../../RP6Lib/RP6base -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Base_LEDs.o.d RP6Base_LEDs.c -o RP6Base_LEDs.o
../../RP6Lib/RP6base/RP6RobotBaseLib.h:197: warning: inline function 'isMovementComplete' declared but never defined
../../RP6Lib/RP6base/RP6RobotBaseLib.h:76: warning: inline function 'setLEDs' declared but never defined
../../RP6Lib/RP6base/RP6RobotBaseLib.h:197: warning: inline function 'isMovementComplete' declared but never defined
../../RP6Lib/RP6base/RP6RobotBaseLib.h:76: warning: inline function 'setLEDs' declared but never defined

Linking: RP6Base_LEDs.elf
avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Base_LEDs.o -I../../RP6Lib -I../../RP6Lib/RP6base -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Base_LEDs.elf.d RP6Base_LEDs.o ../../RP6Lib/RP6base/RP6RobotBaseLib.o ../../RP6Lib/RP6common/RP6uart.o --output RP6Base_LEDs.elf -Wl,-Map=RP6Base_LEDs.map,--cref -lm
RP6Base_LEDs.o: In function `main':
d:\rp6\hex\rp6base_examples\Example_01_LEDs/RP6Base_LEDs.c:64: undefined reference to `setLEDs'
d:\rp6\hex\rp6base_examples\Example_01_LEDs/RP6Base_LEDs.c:77: undefined reference to `setLEDs'
d:\rp6\hex\rp6base_examples\Example_01_LEDs/RP6Base_LEDs.c:94: undefined reference to `setLEDs'
make: *** [RP6Base_LEDs.elf] Error 1


erst wenn ich alle setLEDs in nen kommentar schreibe funktioniert das compilieren.. woran könnte es liegen? hab ein bisl rumprobiert, leider ohne erfolg.

mfg Vicinzu

PS.
es sind die examples vom RP6Examples_20071016.zip

sehreilig
22.04.2008, 06:55
Hallo,
ein Crack bin ich nicht, aber vielleicht hilfts dir weiter:
Kann es sein, dass du im "Programmers Notepad unter Tools-> "Make all" den Menuepunkt Tools->"Programm" klickst ?
Die Warnungen besagen m.E., dass die genannten Funktionen in deinem Programm zwar richtig deklariert (d.h. angemeldet) wurden, die fehlermeldungen sagen, dass aber der eigentliche Inhalt (was in der Funktion geschehen soll) nicht gefunden wurde.
Es kann auch sein, dass die zeile #include "RP6RobotBaseLib.h" ganz oben in deinem Quelltext nicht ausgeführt wurde (dann müssten aber noch mehr Fehlermeldungen kommen).
Grüße von Jens

Vicinzu
22.04.2008, 08:30
Leider nicht, hab sogar wie in der Anleitung stand die make_all.bat benutzt..
hab sogar versucht in der RP6RobotBaseLib.h das setLED neuzuderfinieren.. aber dann meinte der igendwie dass es das schon beim RP6RobotBaseLib.c gab..

Also C / C++ ist für mich neu, hab aber Turbo Pascal, Java & C# erfahrungen.. wollte aber sowieso schon immre C bzw C++ lernen..

Hab jetzt sogar die Lirbrary von der CD versucht.. selber fehler.. also müsste es wohl doch an mir liegen.. jmd noch ne idee?

Pr0gm4n
22.04.2008, 12:58
Hmm...

du hast alle Libs von der CD da rein?

hol dir mal die neuen Libs von AREXX mit den neuen Bsps und dem neuen RP6Loader, --> google, hab grad kein link, sry

wenn du die Funktion neu definieren willst musst du schon in der RP6RobotBaseLib.c gucken, die Headerdatei (.h) included diese

wenn du die bereits mitgelieferte .bat datei nimmst und WINDOWS (wichtig) hast, dann sollte eigentlich kein Fehler auftreten

Ist das nur bei diesem LED-Beispiel oder auch wo anders?

naja, versuchs dann doch auch mal mit dem Programmers Notepad, wobei das meist die unsicherere Methode ist... (wenn dir das lieber ist, dann nimm gleich WinAVR, freeware und alles drin, du musst allerdings AVR-Gcc schon instailliert haben, dürftest du laut deiner Fehlermeldung oben aber schon haben)


MfG Pr0gm4n

Vicinzu
22.04.2008, 15:45
Ich hab die neusten aus dem Internet udn hab auch die von der CD getestet.. bei beiden der selbe Fehler..

In jeder Datei wo setLEDs vorkommt, gibt es den Fehler.
Man kann die Dateien nur Komplieren wenn amn diese entfernt oder kommentarzeichen davor einfügt.. Hab zB das TV-Remote beispiel kompilieren können als ich die setLEDs entfernt habe und es lief (auch auf dem RP6).. aber alles dann auch ohne LEDs..

mfg
Vicinzu

radbruch
22.04.2008, 16:11
Hallo

In RP6RobotBaseLib.c wird u.a. setLEDs() definiert. Also funktioniert irgendwas nicht mit der Einbindung ins Projekt. Ich verwende KAMAVR und muss RP6RobotBaseLib.c von Hand zum Projekt hinzufügen. Alternativ funktioniert bei mir auch ein zusätzliches

#include "RP6RobotBaseLib.c"

setLEDs() und isMovementComplete() sind die einzigen inline-Funktionen. Vielleicht stört sich der Compiler an irgendeinem Schalter. Dann könnte man testweise das "inline" bei den Definitionen entfernen. In RP6RobotBaseLib.c die Zeilen 152 und 740 bzw. in RP6RobotBaseLib.h die Zeilen 67 und 188:


inline void setLEDs(uint8_t leds)
inline uint8_t isMovementComplete(void)
Gruß

mic

Vicinzu
22.04.2008, 16:42
DANKE! Hat geklappt!
Hab in der library inline entfernt und nun kompiliert er es ohne Probleme!
Jetzt kann ich mal mit richtig mit der Programmierung anfangen.. würde aber gerne wissen wieso es nur bei mir kam (trotz neuster software ausm internet)..

naja,
dank dir hat man nun eine einfache Lösung des Problems! ;)


mfg
Vicinzu

radbruch
22.04.2008, 16:51
Prima.


würde aber gerne wissen wieso es nur bei mir kam
Das würde mich auch interessieren. Ich tippe auf einen Schalter im makefile der inline verhindert. Vielleicht weiß ein avr-gcc-Kenner woran das liegt.

Alpenmerlin
27.04.2008, 20:19
Ich danke euch für diesen Beitrag! Ich rödel auch schon ein paar Stunden an dem Problem rum!

Jetzt kanns bei mir auch endlich losgehen... :D

SlyD
29.04.2008, 15:12
Hallo,

also erstmal ist es wichtig zu wissen welche WinAVR Version Ihr denn überhaupt verwendet.
Das Problem bei WinAVR ist, dass sich von Version zu Version eine ganze Menge ändern kann ;)
Man bleibt also besser immer bei einer Version solange man keine neuen Features aus einer späteren Version benötigt.
"Never change a running system" ist hier wirklich ernst zu nehmen!


Die RP6Lib und Beispiele sind für WinAVR Version 20070525 entwickelt und getestet worden.
Auch mit 20071221 klappt es. Es erscheinen nur drei (unwichtige) Warnings wegen inline Funktionen (warum auch immer die Entwickler vom GCC meinten, dass "inline" nicht dem GNU99 Standard entspricht obwohl es schon seit ich mich erinnern kann problemlos funktioniert hat)

Den Fehler wie Vicinzu ihn gepostet hat, konnte ich allerdings mit keiner der 2007er Versionen reproduzieren!

Wie auch immer - in der 20080429er Version der RP6 Beispielprogramme wurde das inline entfernt.

s.
http://www.arexx.com/rp6

Zusätzlich ist dort auch das aktuelle Selbsttestprogramm mit Quellcode enthalten (das mit den Encoder Anzeigen...), man muss es also nicht mehr separat herunterladen.

MfG,
SlyD

PS:
Falls ihr schon die 20080411er Version von WinAVR heruntergeladen hattet - die enthält einen gravierenden Bug und ist daher wieder vom Netz genommen
worden:
http://www.mikrocontroller.net/topic/97264
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=437946#437946

Also die besser nicht verwenden und bei den alten 2007er Versionen bleiben.