Forum: Mikrocontroller und Digitale Elektronik Stackpointerfehler


von Peter (Gast)


Lesenswert?

HIIIIILFEEEEE !
Ich werd noch verrückt, meine Unterprogrammsprünge
funktionieren nicht, obwohl ich den Stackpointer initialisiert habe.
Mein Problem ist der erste Unterprogrammaufruf funktioniert, ist das
erste Unterprogramm jedoch beendet (mit ret) so springt er nicht
in das main Programm zurück von dem er aus in das Unterprogramm
gesprungen ist sondern springt anscheinend auf Adr. 0x0000 wo der rjmp
des Main Programm ist. -> Somit wird wieder ganz am Anfang des Main
Programms begonnen....
Wer weiß meinen Fehler, wäre Euch sehr dankbar...


Mein Main Programm:


MAIN:
    ;Initialisierung des Stack Pointers
     ldi   stack,HIGH(RAMEND)
     out   SPH,stack
     ldi   stack,LOW(RAMEND);Initiate Stackpointer
     out   SPL,stack ; wegen Interrupts und Unterprogr.
    ;Stackpointerinitialisierung ende


    ldi mp,0xff
    out DDRC,mp
    ldi mp,0x00
    out PORTC,mp

    ldi DATENREG, 0b01000001
    ldi X_ADRESSREG_LOW,0b10101010
    ldi X_ADRESSREG_HIGH, 0b00000111

    rcall INFO_IN_SR ; SR->Schieberegister

    rcall SCHREIBEN_IN_DPRAM
LOOP:    jmp LOOP


Vielen Dank

Peter

von mmerten (Gast)


Lesenswert?

Da ich jmp xxx lese sollte es ein avr mit mehr als 8k flash sein. Ein
beliebter Fehler ist die Assembler-Option "Wrap raltive jumps"
enabled zu lassen. Dann erzeugen rcall/rjmp keine Fehler und es werden
allerdings falsche Adressen berechnet.

von Peter (Gast)


Lesenswert?

Hallo,
ich simuliere den Ablauf durch einen Singelstepmodus im
AVR Studio. Beim Assemblieren habe ich leider die Option
Wrap relative jump nicht gefunden..
Übrigens ich verwende den ATmega32 Baustein

Peter

von mmerten (Gast)


Lesenswert?

Findest du bei AVR-Studio 4.xx unter dem Menü PROJEKT, AVR Assembler
Setup

von Peter (Gast)


Lesenswert?

Danke für Eure Hilfe,
Problem beseitigt...
Ursache: Falsche Version des AVRStudios....
Neuere Version eingespielt jetzt funktionierts !


Danke nochmal
Peter

von Peter (Gast)


Lesenswert?

Eine Frage doch noch was wird durch die Assemblerfunktion
Wrap relative Jump ausgelöst ?

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.