programmsprung zum bootloader

OP #2014975
Lesenswert?

hallo,

moechte gerne wegen

application->bootloader

wechsel einen programmsprung zu einer bestimmten code adresse im flash 
meines avr mikrokontrollers machen. ich muss, aus dem bootloader nicht 
zurueck in die applikation (wird ueber reset gemacht).

mit

int main(){

  void (*start_boot)(void)=0x1234; // hier sitzt der bootloader code

  while(1){

    ...

    start_boot();  // irgendwann wenn verlangt

    ...

  }

}

wollte ich das bewerkstelligen (hab das so gelesen).

meine Frage:  wenn ich das jetzt so realisiere, werden dann wie bei 
einem normalen funktionsaufruf bestimmte register gerettet und die 
ruecksprungadresse des aufrufs gespeichert?  heisst das, ich habe 
irgendwo die geretteten daten rumliegen, die ich eigentlich nicht mehr 
brauche?  kann man auf andere weise springen, ohne diese datenretterei?
#2015090
Lesenswert?

Can Cobe schrieb:
> meine Frage:  wenn ich das jetzt so realisiere, werden dann wie bei
>
> einem normalen funktionsaufruf bestimmte register gerettet und die
>
> ruecksprungadresse des aufrufs gespeichert?  heisst das, ich habe
>
> irgendwo die geretteten daten rumliegen, die ich eigentlich nicht mehr
>
> brauche?  kann man auf andere weise springen, ohne diese datenretterei?

Das ist doch völlig egal. Nach einem Update machst du doch sowieso einen 
Reset.

mfg.
OP #2015225
Lesenswert?

hey danke danke danke...

das mit der reihenfolge ist mir jetzt auch klar...

wenn ich aber immer aus dem bootloader starte und dann in die 
applikation springe, dann habe ich noch das problem, dass bestimmte 
daten gerettet werden, die ich nicht brauche. oder?  das waere ja schade 
um den verschwendeten speicherplatz...
#2015237
Lesenswert?

Can Cobe schrieb:
> wenn ich aber immer aus dem bootloader starte und dann in die
>
> applikation springe, dann habe ich noch das problem, dass bestimmte
>
> daten gerettet werden, die ich nicht brauche. oder?  das waere ja schade
>
> um den verschwendeten speicherplatz...

Hast du nicht.
Du benutzt einen Jump-Befehl, um in die Applikation zu gehen. Da wird 
nichts gesichert. Nur bei einem Call oder einem Interrupt wird die 
Adresse auf dem Stack abgelegt, damit er bei Return weiss, wo er 
hergekommen ist.

mfg.

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