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
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 )
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.
aber sonst, das includen passt? apropos, auserdem dürfte der die nur einmal deklarieren.. grund: #ifndef _RAIL_H_ #define _RAIL_H_ bool bTestVar; #endif
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?
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".
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.