mikrocontroller.net

Forum: PC-Programmierung IAR Include Problem


Autor: Christopher Schirner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mag "funktioniert nicht" heißen?

Stürzt der Compiler ab?

Autor: Christopher Schirner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 )

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christopher Schirner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber sonst, das includen passt?

apropos, auserdem dürfte der die nur einmal deklarieren.. grund:

#ifndef _RAIL_H_
#define _RAIL_H_

bool bTestVar;

#endif

Autor: Christopher Schirner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
btw hier ne JPG, falls jemand keinen PDF reader hat
http://root.pixelmurder.de/drawing.jpg

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Christopher Schirner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm ok .. und wo deklarier ich dann Globale Variablen?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

blafusel.h
// Deklaration
extern int blafusel;

blafusel.c
#include "blafusel.h"

// Definition und Initialisierung
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".

Autor: Christopher Schirner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok klappt... danke :P

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den guten Beitrag hab schon ewig gesucht

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mega gut der Beitrag, danke!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.