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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.