IAR Embedded Workbench Linker Problem MSP430

OP #4451738
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
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.
Gast
Wurde das Projekt mit bereits vorhandenen obj zusammen kopiert? Erzwinge 
ein vollständiges Build. Also alle Module compilieren und dann linken.
OP
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.