IAR Include Problem

Gast #417585
Lesenswert?

Hallo liebe µC Freunde!

Ich hab ein Problem mit IAR V3.41.

Ich möchte mehrere Dateien so includen, das "Jeder alles kennt".

Nach diesen Prinzip verfahre ich normalerweise beim VC++:
http://root.pixelmurder.de/drawing.pdf

Dies funktioniert beim IAR nicht :(

Hier ist der C Code (bzw eigentlich nur die include stuktur usw)
http://root.pixelmurder.de/Modelleisenbahn.rar

Ich bin völlig ratlos, wie ich beim IAR includen soll.

Vielen Dank schonmal im Vorraus, für eure Antworten.

MFG
Christopher Schirner
Gast #417587
Lesenswert?

nein, ich mein das das include konzept nicht funktioniert im IAR

z.b. hab in der LCD.h eine bool bTest; angelegt, und wollte in der
main.c bTest = false; machen ..

fehler:
Error[e27]: Entry "bTestVar" in module LCD ( C:\Dokumente und
Einstellungen\Schinken\Eigene Dateien\µC\
Modelleisenbahn\Debug\Obj\LCD.r43 ) redefined in module Rail (
C:\Dokumente und Einstellungen\Schinken\Eigene
Dateien\µC\Modelleisenbahn\Debug\Obj\Rail.r43 )
Persönliche Seite #417588
Lesenswert?

Du definierst globale Variablen in einer Headerdatei?

Das ist ein Fehler - der führt dazu, daß für jedes Sourcemodul, das
diese Headerdatei einbindet, eine neue Kopie der globalen Variablen
angelegt wird.

Manche Compiler (gcc) können diesen Fehler tolerieren; deren Linker
überlagert alle gleichlautenden Symbole.
Ich halte das für ausgemachten Murks.

In Headerdateien sollten Variablen nur deklariert werden (durch
voranstellen des Schlüsselworts "extern"), und sie sollten in exakt
genau einer Sourcedatei definiert werden.
Persönliche Seite #417591
Lesenswert?

Dein #include-Trick hilft nur gegen mehrfaches Einbinden in dasselbe
Sourcefile, nicht aber gegen Einbinden in verschiedene Sourcefiles.

Daher wird Deine Variable für jedes einzelne Sourcefile angelegt, das
die betreffende Headerdatei einbindet.

Das lässt sich auch nicht mit so einem "include-guard" abfangen; wie
soll der Compiler beim Übersetzen eines Sourcefiles wissen, was er bei
einem früheren Compilerlauf für ein anderes Sourcefile gemacht hat?
Persönliche Seite #417593
Lesenswert?

So, wie man das in C (oder auch C++) schon immer macht.

blafusel.h
1
// Deklaration
2
extern int blafusel;

blafusel.c
1
#include "blafusel.h"
2

3
// Definition und Initialisierung
4
int blafusel = 0;


Jedes Modul (C-Quelltextdatei), das auf die globale Variable zugreifen
will, muss "blafusel.h" (oder eine diese Headerdatei einbindende
Headerdatei) einbinden, um die Deklaration "sehen" zu können.
Andernfalls motzt der Compiler über "undefined symbol".

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren