Forum: Mikrocontroller und Digitale Elektronik IAR Embedded Workbench


von Großes F. (112)


Lesenswert?

Hallo allerseits,

also ich arbeite gerade mit den Mikrocontrollern der Firma EnergyMicro 
und habe ein wenig Startschwierigkeiten, die Bibliotheken in die 
IAR-Embedded-Workbench richtig einzubinden.

Wie stelle ich den Preprocessor ein, automatisch in den richtigen 
Verzeichnissen nach den benötigten C-Dateien zu suchen?

Beispielsweise habe ich die Zeile

> #include "efm32_cmu.h"

in meinem Programm.

Die HeaderDatei befindet sich in
D:\Eigene Dateien\EFM32_Programm\efm32lib\inc\

und dieses Verzeichnis habe ich in den Projektoptionen --> C/C++Compiler 
Einstellungen in den "additional include directories" auch eingebunden.
...und soweit ich es verstehe, wird die HeaderDatei von dem Preprozessor 
auch gefunden, denn sonst hätte er sich beschwert, was mir nämlich 
passiert ist, bevor ich dieses Verzeichnis eingebunden hatte.

Nun möchte ich allerdings auch einige Funktionen des eingebundenen 
Headers nutzen, in der Main nutze ich also die Funktion

> CMU_ClockEnable(cmuClock_GPIO, true);

...und erhalte daraufhin den folgenden Error:

>Error[Li005]: no definition for "CMU_ClockEnable"
>[referenced from D:\Eigene Dateien\
>EFM32_Programm\Debug\Obj\main.o]


Offenbar wird also die c-Funktion: efm32_cmu.c nicht gefunden.

Diese befindet sich in dem Verzeichnis
D:\Eigene Dateien\EFM32_Programm\efm32lib\src\


und dieses Verzeichnis habe ich ebenfalls in in den Preprocessoroptionen 
eingebunden...
Im gegensatz zu der Headerdatei scheint der Preprozessor die Datei 
jedoch nicht selbständig zu finden, obwohl sie vorhanden ist...

Wenn ich die benötigte efm32_cmu.c eigenhändig in den Workframe meines 
Projektes per "addFile" einbinde,  dann wird die Datei gefunden...

Das ist aber irgendwie mega umständlich, vor allem wo die Headerdateien 
ja richtig eingebunden werden, nur mit den C-Dateien klappt es nicht auf 
Anhieb...


jemand eine Idee?

mfg
von Oliver (Gast)


Lesenswert?

Großes Fragezeichen schrieb:
> Das ist aber irgendwie mega umständlich, vor allem wo die Headerdateien
> ja richtig eingebunden werden, nur mit den C-Dateien klappt es nicht auf
> Anhieb...

Tja, das ist halt so "umständlich". Der Compiler compiliert nicht 
automatisch alles, was er in den Verzeichnissen findet, sondern nur das, 
was man ihm per Projekt vorsetzt. Und das ist auch ganz gut so ;)

Oliver
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Großes Fragezeichen schrieb:
> Beispielsweise habe ich die Zeile
>
>> #include "efm32_cmu.h"
>
> in meinem Programm.

Mach aus den Anführungszeichen Spitzklammern:

>> #include <efm32_cmu.h>

und der Compiler sucht im Include-Pfad.

Die Anführungszeichen verwendest Du dann, wenn die Headerdatei an der 
gleichen Stelle zu finden ist, wie die anderen zum Projekt gehörenden 
Dateien (also in "src").

Und versuche mal, den Kram in einem Verzeichnis ohne Leerzeichen im 
Namen (also nicht irgendwo unter Eigene Dateien") abzulegen.
von Großes F. (112)


Lesenswert?

danke für die Hilfe, mal sehen ob ich damit weiterkomme
von Hans-Georg L. (h-g-l)


Lesenswert?

>Error[Li005]: no definition for "CMU_ClockEnable"
>[referenced from D:\Eigene Dateien\
>EFM32_Programm\Debug\Obj\main.o]


Sieht für mich eher nach Fehler vom Linker aus ...
von Micha (Gast)


Lesenswert?

Moin,

der weg, den Du hier beschreibst ist der richtige:

Großes Fragezeichen schrieb:
> Wenn ich die benötigte efm32_cmu.c eigenhändig in den Workframe meines
> Projektes per "addFile" einbinde,  dann wird die Datei gefunden...

Warum ist das sinnvoll?

Du kannst die Funtionen, die in der Datei "efm32_cmu.c" definiert sind 
zu einer Library kompilieren. In einem Projekt musst Du dann nur den 
Header inkludieren und die Library per "add File" hinzufügen.

viel Spaß
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.