Bootloader anspringen: kein jmp bei ATmega8..

Gast #311457
Lesenswert?

Hallo!

Ich hatte in meinem Programm die Möglichkeit, durch ein bestimmtes
Zeichen an der RS-232 über
#asm("JMP 0xe00");
den Bootloader direkt ohne Reset anspringen zu können.
Nun hat AVR den JPM-Befehl aus dem Datenblatt entfernt.
Wer kann mir nen schlauen Weg sagen, das auch über RJMP oder anders
hinzukriegen?
Bin in Assembler nicht so firm...

Danke,
Martin
Gast #311458
Lesenswert?

irgendwie müsste der Compiler ja die aktuelle Adresse ja kennen - dann
müsste sich auch der rjmp automatisch ausrechnen lassen. Ich wüsste
jetzt aber nicht wie...
Ich würde den Holzhammer nehmen:

ldi z, 0xe00  (aufteilen in high- und low-teil  für zh und zl!)
ijmp

je nachdem, was dein Bootlader macht und ob er zum C-Programm
zurückkehren soll, musst du evtl. Z sichern und wiederherstellen.
Gast #311460
Lesenswert?

Klar, gibts auch als Zero-Flag, aber das meine ich nicht.
Die Register R30/R31 werden zusammen als Z-Register bezeichnet.
Also:

ldi r30, low (0xe00)
ldi r31, high (0xe00)   //Sprungziel steht nun in r30:r31
ijmp                    //indirect jmp (z)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren