warum ist neue initialisierun des stackpointers erforderlich

Gast #621520
Lesenswert?
• ▲
▼
hallo,
in der crt, genauer gesagt in init2, erfolgt bekanntlich die 
initialisierung des stackpointers.
nun besitze ich eine anwendung im flash, welche eine andere anwendung
zu einem gegebenen zeitpunkt direkt anspringt. prinzipiell sollte man 
annehmen, dass die initialisierung des stackpointers durch die erste 
anwendung ausreicht. dementsprechend könnte ich init2 komplett 
ignorieren und in linker-script für die zweite anwendung discarden.

dennoch funktioniert das nicht. die zweite anwendung läuft durch 
(erkennbar am messen eines pins, der auf high gesetzt wird). aber ein 
schlichtes debugging über des USART läuft nicht. wohlgemerkt, alles nur 
in der main-routine der zweiten anwendung. die ausgabe über den USART 
erfolgt in einer while-schleife. linke ich hingegen init 2 dazu, oder 
setze den SP explizit, läuft alles, wie es sollte.

falls notwendig, poste ich gerne beispielcode. aber möglicherweise gibt 
es ja eine einfach erklärung.

danke,
bye kosmo
#621530
Lesenswert?
• ▲
▼
Es wird ja nicht nur der Stack gesetzt, sondern sämtliche globale 
Variablen initialisiert.

Startest Du eine neue Anwendung, muß auch neu initialisiert werden, 
sonst krachts.

Und die alte Anwendung sollte zumindest alle Interrupts und den Watchdog 
disablen vor dem Aufruf der neuen.


Peter
Gast #621535
Lesenswert?
• ▲
▼
hallo,
nein, ich rede hier nur von init2.

ausser den vektoren und der init2 werfe ich gar nichts aus der runtime 
raus. die vektoren deshalb, da ich eine sprungtabelle nutze, damit beide 
teile auf interrupts lauschen können. der watchdog ist per default aus 
(fuse-bit).

eine idee ist noch das löschen von R0, das mit init2 einher geht und 
somit fehlt. aber das habe ich schon probiert, iirc.
bye kosmo

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.