Forum: Mikrocontroller und Digitale Elektronik In App von Bootloader springen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Sina A. (sinapse)


Bewertung
-1 lesenswert
nicht lesenswert
hallo,

es wird oft vorgeschlagen hiermit:
1
void (*start)( void ) = 0x0000;
von einem Bootloader in die Applikation zu springen.

Wenn ich nun mit
1
 start();
in die Applikation springe, verschwende ich dann nicht ein wenig platz 
auf meinem stack? wegen rücksprungadresse und retten der Register bei 
einem funktionsaufruf? ist da
1
asm ("jmp 0000")
nicht sauberer?

von Apollo M. (Firma: @home) (majortom)


Bewertung
0 lesenswert
nicht lesenswert
Sina A. schrieb:
> in die Applikation springe, verschwende ich dann nicht ein wenig platz
> auf meinem stack? wegen rücksprungadresse und retten der Register bei
> einem funktionsaufruf? ist daasm ("jmp 0000")

ich mache zwar einen jmp in meinem bootloader, aber nur um den footprint 
klein zu halten.
ansonsten dürfte das egal sein, wenn wie es sollte der stackpointer in 
der applikation neu initialisiert wird, sprich alles auf dem stack wird 
verworfen.


mt

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Sina A. schrieb:
> verschwende ich dann nicht ein wenig platz auf meinem stack?

Initialisiert denn die Anwendung den Stack nicht neu?

von Sina A. (sinapse)


Bewertung
0 lesenswert
nicht lesenswert
ah,

"Initialisiert denn die Anwendung den Stack nicht neu?"

das wollte ich hören... d.h. es wird von addresse 0 nicht direkt meine 
main aufgerufen, sondern zunächst die c runtime Environment durchlaufen, 
die dann alles resetet?

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Sina A. schrieb:
> es wird von addresse 0 nicht direkt meine main aufgerufen, sondern
> zunächst die c runtime Environment durchlaufen, die dann alles resetet?

Ich kenne Deine Entwicklungsumgebung nicht. Üblich ist es, den 
startup-Code zu verwenden, den der Compiler mitliefert.

Was liegt denn bei Deinem Controller an Adresse 0?

Wenn das ein AVR ist, dann liegt da der Reset-Vektor.

von Sina A. (sinapse)


Bewertung
0 lesenswert
nicht lesenswert
ja, ein avr... vom reset vektor geht es dann zum startup code nehme ich 
an?

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]
  • [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.