Forum: Mikrocontroller und Digitale Elektronik Eclipse löst die Includes nicht auf


von thinkJD (Gast)


Lesenswert?

Hallo Leute,
ich hänge jetzt schon seit zwei Tagen an einem Problem und komme einfach 
nicht weiter.

Ich benutze Eclipse zusammen mit dem AVR-Plugin. Jetzt wollte ich die 
RFM12 Lib von hier -> http://www.hansinator.de/rfm12lib/ einbinden und 
für mein Projekt nutzen.

Ich habe mich genau an den folgenden Abschnitt der Doku gehalten:

In order to run, the library will need some configuration, which is 
stored in a header file usually named rfm12_config.h. See the section 
Configuration for more information on how to configure the library. 
Otherwise just take the demo configuration header from the library 
folder, put into your source folder and change the values to your needs. 
The library itself will not include the configuration file, you have to 
do this manually before including the rfm12.h header. However, the 
rfm12.c file will need a special wrapper.

To use the library with your project, it's advised to create two wrapper 
files, which will simplify your makefile and include the library 
configuration. Just create two files, rfm12.c and rfm12.h inside your 
source folder and include the RFM12 configuration header (usually 
rfm12_config.h), as well as the real rfm12.c and rfm12.h.
Here's an example:

rfm12.h
 #include "rfm12_config.h"
 #include "../rfm12lib/rfm12.h"

rfm12.c
 #include "rfm12_config.h"
 #include "../rfm12lib/rfm12.c"

Wenn ich das Projekt dann bauen möchte bekomme ich von Eclipse nur eine 
Latte Fehlermeldungen:

'BIT_SS' undeclared (first use in this function)
'DATARATE_VALUE' undeclared (first use in this function)
'DDR_SS' undeclared (first use in this function)
'FREQ' undeclared (first use in this function)
und so weiter ...

Kann mir jemand von euch sagen, was ich falsch mache? Muss ich noch 
etwas anderes beachten?

Gruß JD

von Martin (Gast)


Lesenswert?

Hast du die Dateien

#include "include/rfm12_hw.h"
#include "include/rfm12_core.h"

mit "reingezogen"?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Passt den deine Projektstruktur zu der des Beispiels?
Was das ganze "simplifien" soll erschließt sich mir nun aber auch nicht.

von thinkJD (Gast)


Angehängte Dateien:

Lesenswert?

Wo rein gezogen? Die ist in dem SRC Verzeichnis mit drin. Ich habe mal 
ein Bild mit angehangen.

von thinkJD (Gast)


Lesenswert?

Ich habe mir jetzt ein Makefile gebaut und mache es ganz old school. Die 
IDE oder das Plugin scheinen einfach nicht ausgereift zu sein.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

thinkJD schrieb:
> Ich habe mir jetzt ein Makefile gebaut und mache es ganz old school. Die
> IDE oder das Plugin scheinen einfach nicht ausgereift zu sein.
Klar die anderen sind immer schuld...
Was mir ganz "old school" auffällt ist z.B. das du garkeinen Ordner 
'rfm12lib' hast, trotzdem in deinem rfm12.h darauf verweisst.

Ansosnten würde man es 'new school' vermutlich eh so machen, dass man 
für die Lib ein eigenes Projekt anlegt vom Typ statische Library, dort 
die RFM12 dateien reinlegt, kompiliert und im anderem Projekt dann 
einfach als einzubindene Libary + include Pfad angibt.
Dann kann man das nämlich auch noch in anderen Projekten nutzen ohne 
jedesmal alles neu zu machen.

von Oliver (Gast)


Lesenswert?

thinkJD schrieb:
> 'BIT_SS' undeclared (first use in this function)

Diese Fehlermeldung bekommst du weder oldschool noch newschool mit einem 
anderen makefile weg, wenn da nicht vorher der Fehler

>fatal error: xxx.h: No such file or directory

kam. Und den bekommst du durch das hinzufügen der source-Dirs zu den 
Includepfaden weg. Das alles hat mit Eclipse oder dem avr-plugin nichts 
zu tun, die Includepfad-defaults kommen vom gcc.

Oliver

von thinkJD (Gast)


Lesenswert?

Mein Fehler... das lag daran, dass ich den Text aus der Doku kopiert 
habe. In meinem Projekt habe ich die Pfade entsprechend angepasst. Es 
kommt mir so vol als wollte Eclipse das SRC Verzeichnis übersetzen ohne 
vorher in die main.c zu schauen.

Mit einem Makefile funktioniert es, ganz oldschool wie schon 
geschrieben.

Wenn du ein wenig Zeit hast, kannst du es ja mal mit deiner Umgebung 
probieren. Dann exportiere ich das Projekt später und lade es hoch.

von Oliver (Gast)


Lesenswert?

thinkJD schrieb:
> Es
> kommt mir so vol als wollte Eclipse das SRC Verzeichnis übersetzen ohne
> vorher in die main.c zu schauen.

Eclipse übersetzt gar nix. Das macht der Compiler. Und der "schaut" auch 
nicht voher ins main.c, sondern übersetzt jede einzelne .c-Datei für 
sich, ganz unabhängig von allen anderen. Von den anderen weiß der gar 
nichts. Das ist ganz unabhängig davon, ob der nun von einem durch 
Eclipse oder von dir oldschool erzeugten makefile aufgerufen wird.

Eclipse baut das makefile basierend auf den Einstellungen, die du in den 
Projekt-Settings gemacht hast. Da musst du die Includepfade richtig 
setzen, dann funktioniert das auch.

Und selbstverständlich müssen in allen Dateien alle benötigten header 
files includiert sein.

Oliver

von Oliver (Gast)


Lesenswert?

Noch was:

Ich habe die ganz starke Vermutung, daß du alle .c-Files aus den 
Verzeichnis src in main per #include "xxx.c" includiert hast.

Das wäre dann allerdings nichgt oldschool, sondern bullshit.

Oliver

von thinkJD (Gast)


Lesenswert?

Nein, das hast du falsch vermutet.
Ich habe genau die Doku beachtet und die zwei Wrapper-Files erstellt und 
im Main die rfm12.h includiert.

Das jede C-Datei einzeln übersetzt wird war mir nicht klar, danke für 
die Info. Das würde erklären warum es nicht übersetzt wird.
Ich kann den Include Pfad doch auch so -> #include "src/rfm12.h" direkt 
angeben. Dazu brauch ich doch keinen Pfad einzustellen oder habe ich da 
noch einen Denkfehler?

von Oliver (Gast)


Lesenswert?

thinkJD schrieb:
> Ich kann den Include Pfad doch auch so -> #include "src/rfm12.h" direkt
> angeben. Dazu brauch ich doch keinen Pfad einzustellen oder habe ich da
> noch einen Denkfehler?

Das geht natürlich auch.

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.