Forum: Mikrocontroller und Digitale Elektronik programmsprung zum bootloader


von Can C. (moklok)


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?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Can Cobe schrieb:
> ich muss, aus dem bootloader nicht
> zurueck in die applikation (wird ueber reset gemacht).

Andersherum wird ein Schuh draus. Reset aktiviert den Bootloader, der 
bei nichtvorhandener Ladebedingung in die Applikation springt.

von Thomas E. (thomase)


Lesenswert?

Knut Ballhause schrieb:
> Andersherum wird ein Schuh draus. Reset aktiviert den Bootloader, der
>
> bei nichtvorhandener Ladebedingung in die Applikation springt.

Richtig. Sonst wirst du ein verwurstetes Programm nie verlassen können.

http://www.mikrocontroller.net/articles/Bootloader

mfg.

von Thomas E. (thomase)


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.

von Can C. (moklok)


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...

von Thomas E. (thomase)


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.

von Can C. (moklok)


Lesenswert?

super, vielen dank nochmals an alle cracks da draussen

lg

von Stefan E. (sternst)


Lesenswert?

Es ist völlig egal, mit was für einem Befehl man zur Applikation 
springt. Der Startup-Code der App initialisiert den Stack-Pointer eh.

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.