mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik L104 Multible Public Definitions bei Keil


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich kann mir zwar denken an was es liegt doch weis ich nicht wie ich
diesen Fehler vermeiden kann daher versuchen ich mal zu beschreiben wie
das Programm aufgebaut ist.

Ich habe das main Programm und in diesem "#include <Projekt1.h>"
include ich das Headerfile Projekt1.h.
Nun stehen jedoch verschiedene Funktionen die ich in in einer
Bibliothek Projekt1.LIB.In verschiedenen Funktionen diese Projekt1.LIB
ist auch das Projeht1.h includet.Wenn ich nun eine Funktion von der
Bibliothek im main Programm aufrufe hagelt er Fehlermeldungen.
Ich denke weil ich die dieses Projekt1.h sowohl in der Bibliothek
aufrufe und auch im main.Ich habe belesen das es wohl mit #ifndef
funktioniert und habe auch schon probiert verschiedene Variationen
jedoch ohne Erfolg.
Sorry Anfänger aber vielleicht hilft mir trotzdem jemand auf die
Sprünge.

Tom

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rück mal Deinen Bildschirm etwas näher ran, ich kann die Fehlermeldung
nicht lesen.


Peter

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.

Ich meinte natürlich die komplette Fehlermeldung.

Da muß nämlich noch mehr stehen.


Peter

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Peter,

hier kommt der Bildschirm.
Alle SYMBOL: Name sind in der Projekt.H definiert.
Diese ist sowohl I2CBUS.LIB und im main Programm #includet.
Ich denke hier liegt der Fehler bzw. das Problem.
Auf alle Fälle Danke für die Schnelle Rückmeldung.

Tom

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

Bewertung
0 lesenswert
nicht lesenswert
Könnte es sein, daß "C_ARRAY_STAENDE_LADEN" eine Variable ist, die in
der Headerdatei nicht nur deklariert, sondern auch definiert ist?

Das ist ein Fehler.
In die Headerdatei davor das Wörtchen "extern" schreiben und die
Definition (und Initialisierung) der Variablen in ein C-Sourcefile
verlagern.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

C_Array_Staende_Laden ist eine Funktion die im Headderfile mit extern
definiert ist

Tom

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mir ist gerade etwas aufgefallen.
Ich speichere die Array Stande von 5 Arrays in 5 Integerwerte.
Wenn ich einen neuen Datensatz in eine Array speichere speichere ich
diesen auch im RTC per I2C zwischen damit ich bei einem Stromausfall
den Arraystand aus dem RTC wieder auslesen kann damit ich da
weitermache wo ich vor dem stromausfall war.Das speichern der Stände
mache ich einzel mit einer Funktion void Funktion (unsigned int).Das
funktioniert auch.Wenn ich nun die Arraystände auslesen will mache ich
das auch mit einer Funktion void Funktion (void) ich lese die
Arraystände in der Funktion einzel mit Pointer aus und versuche sie
dann direkt in den entsprechenden Arrraystand zu überschreiben mit dem
eingelesenen Wert.Eventuell liegt es daran!?!?!?!?

Tom

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es muß irgendwo ne doppelte Definition auftreten von "S2000W1_Z" usw.
und eine davon ist in der Bibliothek.

Ist denn diese Bibliothek schonmal mit anderen Programmen getestet
worden, ob sie überhaupt funktioniert ?


Wenn Du den Quelltext hast, würde ich keine Bibliothek verwenden,
sondern diesen. Es ist sonst manchmal schwer, irgendwelche
Seiteneffekte in Zusammenhang mit diesen Black-Boxes zu finden.

Außerdem sind Bibliothken ja schon vorkompiliert und damit an ein
bestimmtes Memorymodell bzw. Bankingschema gebunden. Deshalb gibt es ja
von den Standardbibliotheken soviel verschiedene.


Peter

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter,
die Definition S2000W1_z ist in der Projekt.h definiert und diese ist
einmal in meinem C Programmfile includet und einmal auch in der
Bibliothek da ich dort auch auf die S2001W1_z zugreift.
Aber wie kann ich erreichen, dass die Projekt.h nur einmal definiert
wird. Geht das nicht mit #ifndef ... .Das ich irgentwie schreiben wenn
die Projekt.h schon einmal includet ist braucht sie nicht mehr includet
werden oder so ähnlich.

Gruß

Tom

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
h-File:

extern int blabla;


Und in nur ein einziges c-File !!!

int blabla;


"einmal in meinem C Programmfile includet und einmal auch in der
Bibliothek"

???

Eine Bibliothek kann nichts mehr includen, da sie ja bereits compiliert
ist.


Peter

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter,

h-File

extern int .....;

Im C-File

#include <h-File>

Um die Bibliothek zu cmpilieren muss ich in der Funktion auch ein

#include <h-File> einfügen da diese Funktion  auf Variablen des h-Files
zugreift.

Ich kann dann die Bibliothek erzeugen ohne Fehler.
Wenn ich nun diese Funktion in meinen C-File aufrufe habe ich doch das
H-File doppelt und daraus kommt der Fehler.
Wenn ich die Funktion direkt in meine C Programm einfüge und diese aus
der Bibliothek nehme meckert er nicht.
Daher hat es etwas damit zu tun, dass das H-File einmen in der
Bibliothek und im C-File includet ist.

Gruß

Tom

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ich kann dann die Bibliothek erzeugen ohne Fehler."

Das ist noch lange kein Beweis, daß sie auch funktioniert.

Wenn Du die Sourcen hast, warum willst Du dann erst eine Bibliothek
erzeugen ?

Das ist doch nur zusätzlich Arbeit und bringt nichts.

Ich hab noch nie Bibliotheken gemacht, kann also nicht sagen, was es
dabei zu beachten gilt.


"Wenn ich nun diese Funktion in meinen C-File aufrufe habe ich doch
das H-File doppelt und daraus kommt der Fehler."

???

Ein h-File macht Funktionen und Variablen nur bekannt, damit der
Compiler weiß, wie er sie benutzen muß.
Es kann nichts doppelt aufgerufen werden, weil in h-Files gar nichts
aufgerufen wird.

Wenn Du ein File, welches Speicher belegt oder Code erzeugt, als h-File
bezeichnest, dann ist das falsch !
Und dann muß gemeckert werden, sobald dieses falsche h-File mehrfach
verwendet wird.


Peter

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich in einem Projekt zwei C-Files einfüge und in jedem das gleich
H-File include. Ich schreibe und lese Arrays im C-File 1.
Im C-File 1 versuche ich dann auf Arrays oder Variablen die ich im
C-File 1 auch verwende zuzugreifen dann ist der Fehler der gleiche.
Ich denke ich habe einen kleinen Fehler irgentwo indem ich auf mache
Varialblen , Array doppelt zugreife und in Jedem C-File das gleiche
H-File includiere.
Ich denke wir kommen auf diesem Weg nicht weiter.
Oder was schlägst Du vor.
Ich denke es ist ein Verständigungsproblem meinerseits.

Tom

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Häng doch mal das h-File hier an.


Peter

Autor: T. Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke mal er linked sowohl die C-Source seiner Library ALS AUCH die
Library selber => nimmt mal die Library raus.

Gruss

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.