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

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.