Forum: Compiler & IDEs warum ist neue initialisierun des stackpointers erforderlich


von kosmonaut_pirx (Gast)


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

von Peter D. (peda)


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

von kosmonaut_pirx (Gast)


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

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.