Forum: Mikrocontroller und Digitale Elektronik Mega644 Bootloader Debuggen


von Alex (Gast)


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?

von Andreas V. (tico)


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

von Hagen R. (hagen)


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

von Alex (Gast)


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

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.