Mega644 Bootloader Debuggen

Gast #1276299
Lesenswert?
• ▲
▼
Hallo,

ich versuche gerade mit avr-gdb & avarice meinen Mega644 zu debuggen. 
Normalerweise klappt auch alles! Nun Versuche ich gerade meinen 
Bootloader zu debuggen, nur leider klappt das nicht.

Als Debugger verwende ich einen JTAG ICE mkII.

Das Phaenomen ist folgendes. Ich kann avarice ganz normal starten und 
will dann mit Eclipse Debugger (wohlgemerkt mit der Normalen Firmware 
klappt auch alles). Das BootRST Flag ist gesetzt und der Code startet 
auch (meine LED blinkt). Sobald ich nun Debugge, steht das Programm auf 
Adresse 0x1FFC0 (ja, ich weiss, die Adresse gibts nicht.). Saemtliche 
Versuche, den Speicher auszulesen schlagen fehl!. (Er liest ueberall 
0xFF).

Als Linker Flag habe ich folgendes
  -Wl,--section-start=.text=0xE000
  Laut DB 0x7000 => 0x7000 * 2 = 0xe000 da WORD Addressen
Meine Fuses 0xF7 0x18 0xFF
                 |-> OCD EN, JTAG EN, SPI EN, Boot Sz 4096 words,
                     Bootrst EN
mein Code
1
int main(){
2
  DDRC |= (1 << PC6);
3
  PORTC ^= (1 << PC6);
4
  DDRC |= (1 << PC7);
5
  PORTC ^= (0 << PC7);
6
  while (1) {
7
    asm volatile ("nop");
8
    PORTC ^= ((1 << PC6) | (1 << PC7));
9
  }
10
}

Hat irgendjemand schon mal soein Problem gehabt?
avarice 2.10 & 2.7; avr-gdb 6.8

Bzw. kann mir jemand helfen, warum ich das Programm nicht debuggen kann?
#1276555
Lesenswert?
• ▲
▼
Alex schrieb:
> Hat irgendjemand schon mal soein Problem gehabt?

Ja, ich. Bei mir ist alles wie bei Dir (Controller, Debugger, Eclipse 
incl. der sonstigen Software), und ich habe denselben Effekt.
Meine Vermutung bis jetzt ist, dass avarice/gdb ein Problem haben, wenn 
der Code nicht an der Stelle 0x0000 beginnt.
Ich habe kurz nach einem Kommandozeilenparameter gesucht, mit dem ich 
die Startadresse explizit mitteilen kann, bin aber bis jetzt nicht 
fündig geworden und hatte auch noch keine Zeit, mich ausführlicher mit 
dem Problem zu beschäftigen.
Bei meinen Experimenten hat das Debuggen genau einmal zufällig 
funktioniert, leider war das aber nicht reproduzierbar. Ich denke aber, 
dass es prinzipiell gehen sollte, wenn man avarice/gdb die richtigen 
Parameter mitgibt.
Als Workaround benutze ich das AVR Studio zum debuggen. Allerdings ist 
das ziemlich lästig, weil man ständig die blöde DLL für die 
Kommunikation mit dem JTAG ICE wechseln muss.

Gruss
Andreas
#1276641
Lesenswert?
• ▲
▼
Das neuste AVStudio hat einen Bug in seinem FLASH Tool. Wenn du diesem 
ein HEX flashen lässt das nicht an Addrese 0x0000 beginnt so macht es 
garnichts ausser den AVR komplett löschen. Baue in deinem Bootloader 
Source einfach folgendes ein
1
.org 0
2
.db 0xFF, 0xFF

ein. Hatte ich hier Beitrag "Re: AVR-Bootloader mit Verschlüsselung" 
bei der Entwicklung meines Bootloaders auch schon.

Gruß Hagen
Gast #1276726
Lesenswert?
• ▲
▼
Hallo ich hab die Loesung.

Einfach ein
1
__asm__ volatile ("break");

Am Anfang des Codes einfuegen und fertig. Somit haelt die CPU 
selbstaendig an. Mit der Eclipse Fkt "Resume at Line" im ASM Fenster, 
kann ich das Device dann explizit starten.

mfg Alex

Antwort schreiben

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.

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.