mikrocontroller.net

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


Autor: Re To (toobatch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Re To (toobatch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Re To (toobatch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also  hab gerad mal kontrolliert :

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

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Re To (toobatch)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.