www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Stack & Rücksprungadresse


Autor: Markus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe folgenden Code bisher nur im Simulator vom AVR Studio getestet
( für den AT90S4433 ). Meine Frage ist, warum springt der Simulator
nicht an die im Stack abgelegte Sprungadresse (loop) , sondern an den
Reset Vektor?


.include "4433def.inc"
.def temp = r16

main:
ldi temp, RAMEND
out SPL, temp
rjmp test

loop: rjmp loop

test:
  ldi  temp,LOW(loop)
  push  temp
  ldi  temp,HIGH(loop)
  push  temp
  ret

Denkfehler? Tippfehler, Fehler im Simulator oder kann der AT90S4433 das
nich? (Wenn ich nen Mega8 auswähle gehts)

mfg Markus

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

schreib mal folgendes zwischen .def... und main:

.cseg
         rjmp reset           ; Reset Handler
         reti          ; IRQ0 Handler
         reti          ; IRQ1 Handler
         reti                 ; Timer1 Capture Handler
         reti                 ; Timer1 compare Handler
         reti                 ; Timer1 Overflow Handler
         reti                 ; Timer0 Overflow Handler
         reti                 ; SPI Transfer Complete Handler
         reti                 ; UART RX Complete Handler
         reti                 ; UDR Empty Handler
         reti                 ; UART TX Complete Handler
         reti                 ; ADC Conversion Complete Interrupt
Handler
         reti                 ; EEPROM Ready Handler
         reti                 ; Analog Comparator Handler

Sebastian

Autor: :-D (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seltsam, hier im AVR-Studio 4 Simulator springt er zu loop, genau wie
Du's dir vorgestellt hast. Da stimmt irgendwas mit Deinem Simulator
nicht.

Autor: Markus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm geht jetzt.... aber warum?

Ich hatte vorhin schon am Anfang:

.org 0x00
rcall main
.org 0x06
rcall TimerOverflow

Autor: mmerten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also das ist Blödsinn und kann nicht funktionieren:
.org 0x00
rcall main
.org 0x06
rcall TimerOverflow

richtig:

.org 0x00
rjmp main
.org 0x06
rjmp TimerOverflow

Autor: Markus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry .. warn Tippfehler ;) Hatte ich auch garnich dastehen. Aber selbst
wenn, sollte doch eigentlich keinen Einfluss auf das Problem haben,
oder?

Autor: hans muller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Denkfehler? Tippfehler, Fehler im Simulator oder kann der AT90S4433
das

Denkfehler. RCALL statt RJMP!

hans.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau nochmal genauer hin, Hans...

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.