www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik programmsprung zum bootloader


Autor: Can Cobe (moklok)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Can Cobe (moklok)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Can Cobe (moklok)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super, vielen dank nochmals an alle cracks da draussen

lg

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.