mikrocontroller.net

Forum: Compiler & IDEs AVRStudio soll gcc-ihex-file debuggen


Autor: Dirk Nasse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab da ein problem mit dem GCC (Feb2005) und AVR Studio (4.10):

Ich schreibe meinen Code gerne auf mehrere Dateien (nach
Funktionsgruppen) verteilt. Daraus folgt ein Problem:

Die Datei main.c wird noch richtig debuggt, aber sobald er in eine Fkt.
springen soll, die in einer anderen Datei liegt, startet er den Debugger
 und zeigt nur den Assemblercode an. Lustiger weise kann's auch mal
sein, dass er eine Datei öffnen will, in der aber nur wild herumspringt
ohne irgendwelchen Sinn...

Weiß jemand, woran das liegen kann?

Autor: Dirk Nasse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur Klärung.
Die Funktionen liegen entweder im selben Vwerzeichnis, eingebunden als
#include"", oder auch in einer gebundenen Lib libavrso.a, die mittels
-l an den Linker übergeben wird... Bei beiden taucht das selbe Problem
auf :(

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Source-Dateien per #include eingebunden werden, dann ist das
auch kein Wunder.
Bedenke, daß die Auswertung von Headerdateien auf reiner Textebene
geschieht - ob Du main.c mit #includes übersetzt oder aber statt der
#includes deren Inhalt an die betreffende Stelle in main.c einfügst,
ist für den Compiler exakt dasselbe.

Die Objektdatei, die der Compiler erzeugt, enthält als Debughilfe nur
die Informationen über Zeilennummern, definierte Symbole etc, nicht
aber Dateinamen.
Somit sind alle von Dir verwendeten Symbole in der aus main.c erzeugten
Objektdatei definiert; anhand eines Symbolnamens kann der Debugger aber
nicht mehr


Wenn Du modular programmieren willst, dann solltest Du es "richtig"
anstellen:

Jedes Modul (*.c-Sourcefile) wird getrennt zu einer Objektdatei
übersetzt, diese werden gelinkt.
Damit Du aus einem Modul Funktionen oder Definitionen eines anderen
Modules verwenden kannst, erzeugst Du für jedes Modul eine gleichnamige
Headerdatei, in der Du die extern sichtbaren Prototypen etc.
deklarierst.

Dadurch bleibt die Zuordnung Objektdateiname-Symbol erhalten.

Wenn Du eine Library verwendest, muss diese Library bereits sämtliche
Debuginformationen enthalten; sonst weiss der Linker auch nicht mehr,
aus welchen Sourcemodulen die Library besteht.
Wenn die Library ebenfalls durch #include von Sourcefiles erzeugt
wurde, dann gilt obengesagtes.

Autor: Dirk Nasse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist zwar nicht gelöst, aber umgangen.

Wenn man anstelle des extcoffs eine dwarf-2 .elf-Datei generiert
funktioniert alles wie es soll. Nur benötigt man für dwarf-2 ein AVR
Studio 4.10 oder höher

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,
wie lauten denn Deine Compiler/Linker/dwarf-Konverteranweisungen?

Gruß Martin

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.