www.mikrocontroller.net

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


Autor: kosmonaut_pirx (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: kosmonaut_pirx (Gast)
Datum:

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

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.