www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Trotz initialisiertem Stack Fehlermeldung


Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich versuche mich gerade an einem AVR MC (ATmega 32-16PU) und 
verwende für die Assembler Programmierung  AVR Studio. Ich habe ein 
eigentlich Simples Programm geschrieben wo eine Led per Tasten - druck 
leuchten soll und mit einem zweiten Taster wieder aus gehen soll. Mit 
einem dritten soll die Led blinken.
Wenn ich mein Programm im Debug - Modus durchgehe, tritt nachdem der 
Timer überläuft folgende Fehlermeldung ein: “AVR Simulator: 
Uninitialized stack pointer used at 0x003b” danach springt er trotzdem 
in die ISR und führt auch meine Befehle für den Interrupt aus. Nachdem 
er damit fertig ist kommt folgende Meldung: ”AVR Simulator: Invalid 
opcode 0xffff at address 0x009898”
Wäre nett wenn sich jemand kurz Zeit dafür nehmen könnte. Vielen Dank 
vorab.

 .include "m32def.inc"
     .org 0x000
     .def temp = r18
     .def t1h = r19
     .def t1l =r20
     .def stini = r17
     .cseg
    rjmp init


    .org 0x010
     rjmp intt1

   .org 0x02b

init:

    ldi stini, LOW(RAMEND)    ;Untere 8 bit laden
    out SPL, stini
    ldi stini, HIGH(RAMEND)   ;Obere 8 bit laden
    out SPH, stini
    ldi r16,0x60
    out DDRD,r16
    sei
    ldi r19, 0xc2
    ldi r20, 0xf7
    ldi  temp, 0b00000100
    out  TIMSK, temp
    rjmp loop


loop:
  SBIc   PinD,2
  rjmp an
  sbic   PinD,3
  rjmp aus
  sbic   PinD,4
  rjmp blink
 jmp    loop

an:
  ori    r27, 0x60
  out    PORTD, r27
  ldi    temp, 0b00000000 ; t1 aus
  out    TCCR1b, temp
  rjmp loop

aus:
  ldi     temp, 0b00000000 ; t1 aus
  out     TCCR1b, temp
  ldi     r27, 0x00
  out     PORTD, r27
  rjmp loop

blink:
  ldi    temp, 0b00000101 ; teiler 1024
  out    TCCR1b, temp
  out   tcnt1l,t1l
  out   tcnt1h,t1h
  ldi    r27, 0b00100000
  out    PORTD, r27
  rjmp loop

intt1:
 com   r27
 out   portd, r27
 out   tcnt1l,t1l
 out  tcnt1h,t1h
 reti

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne den ATMega32 nicht, aber du schreibst von Überlauf und an der 
Stelle .org 0x010 ist der Interruptvektor für den Timer1 Compare Match. 
Daran könnte es vielleicht liegen.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Der Overflowinterrupt liegt auf 0x12.

MfG Spess

Autor: ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wuerd mal den Simulator des AVR studio anwerfen, und das Ganze 
durchsteppen

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mich recht erinnere, reserviert der ATMega32 für jeden Eintrag 
in der Interrupt-Tabelle ein Doppelwort. Das deshalb, damit man ein 
vollständiges 'jmp' unterbringen kann, sodass man in den gesamten 
Programmspeicher hüpfen kann.

Ich denke, der springt dir an eine Stelle, wo nix steht (eben 
'unprogrammiert', 0xFF im Flash) und das, weil deine Tabelle zu kurz 
ist.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
.include "m32def.inc"
     .org 0x000           da steht der ASM-Counter ohnehin am Anfang
     .def temp = r18
     .def t1h = r19
     .def t1l =r20
     .def stini = r17
     .cseg                etwas spät, ihm hier erst zu sagen, daß wir im cseg sind, wenn Du oben schon ein .org benutzt...

    rjmp init


    .org 0x010
     rjmp intt1

   .org 0x02b
warum nicht so?
;--------- Definitionen ----------
     .def temp = r18
     .def t1h = r19
     .def t1l =r20
     .def stini = r17

;--------- Programmbeginn ------- 
.cseg
   rjmp init

.org OVF1addr
   rjmp intt1

.org INT_VECTORS_SIZE
init:

usw. usw.

erspart viel nachdenken, wenn man die symbolischen Namen benutzt, 
spätestens, wenn man mit dem Code auf einen anderen AVR umzieht.

Gruß aus Berlin
Michael

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal vielen Dank für die Antworten!
Hab die Adresse für den Interrupt geändert, jedoch bringt der Simulator 
immer noch die gleichen zwei Fehlermeldungen. Auch mit dem Doppelword 
habt Ihr recht, nur die Sprungweite des relativen Srung hat ausgereicht. 
Hab es aber zur Sicherheit mit dem Jump probiert und es hat sich nichts 
geändert. Michaels Ratschlag bezüglich der Programmierung werd ich mir 
auf jeden Fall angewöhnen.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal 'ne dumme Frage: im Simulator den richtigen Controller eingestellt 
hast du aber schon, oder?

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So dumm war deine Frage nicht! Das war der Grund! Besten dank.

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zum simulieren debuggen setze ich eigentlich immer die Sprungtabelle für 
die Interrupts in den Quelltext damit man sieht wohin das Programm 
verzweigt gerade wenn man mit den Interrupts arbeitet.

Kosten kaum Platz auf dem AVR nur ist vielleicht etwas mehr scrollen 
nötig
.org 0x000     ;Beispiel für ATM16
  jmp RESET
  jmp EXT_INT0
  jmp EXT_INT1
  jmp TIM2_COMP
  jmp TIM2_OVF
  jmp TIM1_CAPT
  jmp TIM1_COMPA
  jmp TIM1_COMPB
  jmp TIM1_OVF
  jmp TIM0_OVF
  jmp SPI_STC
  jmp USART_RXC
  jmp USART_UDRE
  jmp USART_TXC
  jmp AD_C
  jmp EE_RDY
  jmp ANA_COMP
  jmp TWSI
  jmp EXT_INT2
  jmp TIM0_COMP
  jmp SPM_RDY

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.