Der Linker produziert mir eine Fehlermeldung: Linking Error[e24]: Segment DATA16_AN (seg part no 5, symbol "P6DIR" in module "lcd", address [36-36]) overlaps segment DATA16_AN (seg part no 10, symbol "_A_P6DIR" in module "main", address [36-36]) Error while running Linker Port 6 wird zum Teil im Modul LCD genutzt (Bits 3, 4, 5). Dort steht P6DIR |= 0x38; Das Modul MAIN möchte die Bits 0 und 1 nutzen. Dort steht P6DIR &= ~(BIT0 | BIT1); Wie kann ich den Linker überzeugen, dass das eine legale Konstruktion ist? Ich möchte ungern die P6DIR Initialisierung aus LCD heraus nehmen.
Sind die beiden Zuweisungen in Funktionen enthalten, oder sind die möglicherweise außerhalb eines Funktionsrumpfes untergebracht? Hat der Compiler beim Übersetzen der Module irgendwelche Warnungen ausgeben? Könnte es sein, daß Du in einem der beiden Module das #include <msp430.h> vergessen hast?
Rufus Τ. F. schrieb: > Sind die beiden Zuweisungen in Funktionen enthalten, Ja. > oder sind die > möglicherweise außerhalb eines Funktionsrumpfes untergebracht? Nein, da wären sie auch wirkungslos. > Hat der Compiler beim Übersetzen der Module irgendwelche Warnungen > ausgeben? Nein. > Könnte es sein, daß Du in einem der beiden Module das > > #include <msp430.h> > > vergessen hast? Dann hätte der Compiler massiv gemeckert.
Hmm. Das ist merkwürdig, denn die symbolischen Namen unterscheiden sich. Ist eines der beiden Module C++-Code und das andere C-Code?
Wurde das Projekt mit bereits vorhandenen obj zusammen kopiert? Erzwinge ein vollständiges Build. Also alle Module compilieren und dann linken.
Rufus Τ. F. schrieb: > Ist eines der beiden Module C++-Code und das andere C-Code? Nein, beides reines C misch masch schrieb: > Wurde das Projekt mit bereits vorhandenen obj zusammen kopiert? Erzwinge > ein vollständiges Build. Also alle Module compilieren und dann linken. Ändert nichts. Nun wollte ich gerade 10 Zeilen Demo Code tippen und posten. Da tritt der Fehler nicht auf. Also geht es prinzipiell und irgendwo ist ein Würmchen. Ich gehe auf die Suche und melde mich wieder. Erst einmal besten Dank.
Georg G. schrieb: > Linking Error[e24]: Segment DATA16_AN (seg part no 5, symbol "P6DIR" in > module "lcd", address [36-36]) overlaps segment DATA16_AN (seg part no > 10, symbol "_A_P6DIR" in module "main", address [36-36]) Error while > running Linker Das bedeutet, daß in "lcd" ein Symbol "P6DIR" verwendet wurde, in "main" aber aus irgendwelchen Gründen ein Symbol "_A_P6DIR". Irgendwas an den Compilereinstellungen für "lcd" und für "main" differiert hier.
Workspace gewechselt für eine andere Baustelle und nach getaner Arbeit wieder zurück. Der Fehler ist nicht mehr da. Unbefriedigend. Hoffen wir, dass es noch einmal auftritt. Dann sichere ich das gesamte Verzeichnis zwecks Forensik. Nochmals Danke für die Anregungen.
Ursache (?) gefunden: LCD.C und MAIN.C liegen in verschiedenen Verzeichnissen. Bei LCD.C steht #include <io430.h> und bei MAIN.C steht #include "io430.h" Das führt offenbar dazu, dass der Compiler unterschiedliche Header Dateien einfügt, einmal io241x.h und beim anderen File io2418.h. Und die vertragen sich nicht. Warum das so ist, habe ich dann nicht mehr erforscht. Die io241x.h ist etwas älter, stammt wohl direkt von TI. Warum IAR sie (und einige andere mit gleicher Syntax) mit installiert hat, ist eine gute Frage.
Georg G. schrieb: > Das führt offenbar dazu, dass der Compiler unterschiedliche Header > Dateien einfügt, einmal io241x.h und beim anderen File io2418.h. Hmm. Gibt es möglicherweise zwei konkurrierende io430.h in Deinem Dateisystem?
Ich habe noch parallel den Texas Code Komposter drauf, war mir anfangs nicht sicher, womit ich arbeiten wollte. Denkbar, dass die Leiche daher kommt. Aber nun ist es sauber.
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.