IAR Embedded Workbench Linker Problem MSP430

OP #4451738
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.
OP #4451805
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.
OP #4452474
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.
Persönliche Seite #4452522
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.
OP #4452693
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.
OP #4453193
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren