www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik kein Sourcelevel Debugging, wenn BOOTRST=0


Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe hier ein kleines Problem mit dem AVR Studio V4.12 SP1 im
Zusammenspiel mit der aktuellen WinAVR (gcc) Umgebung.
Ich möchte für den ATmega128 einen Bootloader entwickeln und das klappt
alles ganz prima bis auf die Tatsache, dass ich mit dem AVR Studio kein
Sourcelevel Debugging betreiben kann, sobald ich den Resetvektor auf
eine Bootresetadresse lege (also weg von der 0x0000).

Um das Problem nachzuvollziehen (ist auch mit dem Simulator möglich;
man braucht also keine Hardware), habe ich ein Minimalprojekt mit
folgender main erstellt:

int main (void)
{
    DDRB    =   (1<<DD5);   /* configure PB5 as output pin */
    PORTB   &=  ~(1<<PB5);  /* switch on LED (low-active) connected to
this pin */

    for (;;); /* endless loop */

    return 0;
}

Das Mapfile sorgt durch folgenden Eintrag dafür, dass der Code an der
richtigen Stelle landet:
# set start-address of text section
# compiler organizes memory as an ..K x 8bit  Array (e.g. 128K x 8bit
with addresses from 0x00000 to 0x1FFFF for ATmega128)
# debugger organizes memory as an ..K x 16bit Array (e.g. 64K x 16bit
with addresses from  0x0000 to  0xFFFF for ATmega128)
# the following setting has to be made with the compiler's
perspective, e.g. 0x1F000 for a boot-reset vector 0xF800
TEXT_START_ADDRESS = 0x1F000
LDFLAGS += -Wl,--section-start=.text=$(TEXT_START_ADDRESS)


Die fuses sind richtig gesetzt (siehe fuses.jpg) und das Programm
funktioniert einwandfrei, was sich im Disassembler leicht
nachvollziehen lässt (siehe AVRstudio_nach_reset.jpg).
Leider stellt der Debugger keinen C- Sourcecode dar bzw. zieht dafür
eine falsche Adresse heran, nämlich die 0x7865 für die main statt der
0xF865 (adresse 0x1F0CA aus mapfile geteilt durch zwei; zur Erläuterung
siehe make-Kommentar oben). Es sieht also so aus, als ob beim
Rekonstruieren der Sourcecode Adressen der Debugger das MSB verschluckt
(die falsche 0x7865 und die richtige 0xF865 unterscheiden sich ja nur
durch das MSB).
Ein Vergrößern/Verkleinern des Bootbereiches (z.B. auf Resetadresse
0xF000 oder 0xFC00) lassen das selbe Verhalten erkennen.

Mache ich was falsch oder bin ich auf einen Bug im AVR Studio
gestoßen?

Ach ja, bevor ich das vergesse: für meinen Zweck kann ich keinen
bestehenden Bootloader einsetzen. Ich muss das Problem also lösen (oder
ohne Sourcelevel Debugging entwickeln).

Vielen Dank,
Peter

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> "Das Mapfile sorgt durch folgenden Eintrag dafür, dass der Code an
der richtigen Stelle landet:"

hier muss es natürlich statt "Mapfile" richtig "Makefile" heißen.

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.