Forum: Mikrocontroller und Digitale Elektronik Sprung von Bootloader nach Hauptprogramm


von www.sde.at/pem (Gast)


Lesenswert?

Ich habe folgendes Problem:

Ich will von meinem Bootloader in das Hauptprogramm springen
dabei verwende ich asm volatile("rjmp 0"). Aber er macht nicht im
Hauptprogramm weiter...
ATMEGA8
Hauptprogramm bei adresse 0x000
WinAVR

Kann mir jemand bitte weiterhelfen....

Danke

von Peter (Gast)


Lesenswert?

Mix aus C und Assembler:

MCUCR = 1;
//move vectors to 0x0000
MCUCR = 0;
#asm ("jmp 0x0000")

von Peter (Gast)


Lesenswert?

Hab es eben erst gesehen, du darfst natürlich auch nicht rjmp nehmen.

von www.sde.at/pem (Gast)


Lesenswert?

Hallo danke für di antwort.

jmp wird nicht akzeptiert. ("jmp 0")

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

wie compilierst du deinen Bootloader? Wenn du die .text Sektion per
--section-start=.text=... verschiebst wird das mit dem rjmp nichts
werden da der Linker auch die Adresse verschiebt. Ich löse das per
Linkersymbol. Der Linker bekommt an der Kommandozeilen
--defsym=app_start=0 und dann

asm volatile("rjmp app_start");

an der Stelle wo du ins Hauptprogramm springen willst. Kompletten
Bootloader samt passendem makefile findest du in meinem USBisp-Projekt.
-> www.matwei.de

Matthias

von frankieboy (Gast)


Lesenswert?

In Assembler kann man das gut mit
rjmp  (FLASHEND+1)
machen, der rjmp landet dann immer bei Adresse 0. Funktioniert bei
allen AVRs (sollte).

Gruss

Frank

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.