Forum: Mikrocontroller und Digitale Elektronik IAR Embedded Workbench Linker Problem MSP430


von Georg G. (df2au)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Georg G. (df2au)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hmm. Das ist merkwürdig, denn die symbolischen Namen unterscheiden sich. 
Ist eines der beiden Module C++-Code und das andere C-Code?

von misch masch (Gast)


Lesenswert?

Wurde das Projekt mit bereits vorhandenen obj zusammen kopiert? Erzwinge 
ein vollständiges Build. Also alle Module compilieren und dann linken.

von Georg G. (df2au)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Georg G. (df2au)


Lesenswert?

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.

von Georg G. (df2au)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Georg G. (df2au)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Na dann ist ja gut.

Viel Erfolg!

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
Noch kein Account? Hier anmelden.