Forum: Mikrocontroller und Digitale Elektronik object nur hinzugelinkt : blödsinn entsteht!


von Re T. (toobatch)


Lesenswert?

Hi, ich brauch hilfe ...

ich linke ein compiliertes modul zu einem bereits bestehendem projekt 
hinzu und das gesamte programm macht nichtmehr was es machen soll, ob 
wohl ersteinmal testweise überhaupt kein aufruf der funktionen in dem 
neu hinzugefügten modul aus dem programm vorhanden sind ( auch keine IRQ 
in dem neuen Modul).

was  ist dort schief gelaufen ??   ich mein eig. dürfte der code des 
neuen moduls ja nie ausgeführt werden wenn ich ihn nicht aus dem 
programm aufrufe oder ??


_
atmega2561 mit avr gcc

von Johnny (Gast)


Lesenswert?

Naja, wenn Du z.B. globale Variabeln mit gleichem Namen hast, dann denkt 
sich der Linker sicher, dass es wohl dasselbe ist und verweist auf 
denselben Speicherplatz...
Mann muss bei solchen Spässen schon wissen was man tut.

von Re T. (toobatch)


Lesenswert?

hmm,

naja solange ich nicht mit extern *****   draufzugreife dürfte ich doch 
sogar gleiche Var.-bezeichner verwenden können ...  der 
gültigkeitsbereich beschränkt ishc doch immer auf die Quellcodedatei 
bzw. dann das Objekt ...


na ich kontrollier mal ... vielleicht find ich ja was doppeltes

von let (Gast)


Lesenswert?

>der gültigkeitsbereich beschränkt ishc doch immer auf die
>Quellcodedatei bzw. dann das Objekt ...

Nur wenn diese Variablen als 'static' deklariert wurden.
Das Schlüsselwort 'extern' dient nur zur Information des Compilers
das es so eine Variable gibt. Alles andere macht der Linker.
Der fasst globale Objekte mit gleichen Namen zu einem zusammen.

Das mag aber auch vom verwendeten Compiler abhängen. Ich meine
mal gelesen zu haben das sich Windows-compiler bei diesen
'multiple commons' anders verhalten. Der gcc ist kein solcher Compiler.

von Re T. (toobatch)


Lesenswert?

also  hab gerad mal kontrolliert :

alle Variablendeklarationen  außerhalb der funktionen sind mit static 
deklariert!!

von let (Gast)


Lesenswert?

Wenn das neue Modul tatsächlich nicht benutzt wird dürfte
der Linker es erst gar nicht zum Binary linken.
Du könntest mal versuchen -ffunction-sections und -fdata-sections
dem Compiler und -gc-sections dem Linker als Optionen zu geben.
Dann wird alles was nicht gebraucht wird rausgeschmissen.

Wenn sich die Größe des Binaries dennoch erhöht kannst du noch
-Wl,-Map=target.map,--cref
den LDFLAGS hinzufügen (falls nicht schon der Fall).
Dann im Mapfile (target.map) unter 'Cross Reference Table' nachsehen
welche Funktion/Variable von welchem Modul verwendet wird.
Vielleicht findest du dort einige Ungereimtheiten.

von Re T. (toobatch)


Lesenswert?

jojo , danke schonmal ...

aber geht trotzdem noch nicht ...  also in dem C-Ref.-Tab.  steht hinter 
den Funktionen des moduls auch nur dieses modul-Objekt ...

also müsste  keine externer code die funktionen aufrufen ...


trotz den neuen comp./linker -options  stehen aber weiterhin diese 
funktionen in der map-datei...

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.