komme bei den warnungen nicht weiter

Gast #933768
Lesenswert?

Sorry dass ich gleich hier frage, aber irgendwie sind mir die 
fehlermeldungen bbei meinem code ein wenig befremdlich. Habe mich da an 
einer Fourier-Transformation versucht und bekomme nun folgende 
Fehlermeldungen:

AVR Simulator: Uninitialized stack pointer used at 0x0045
AVR Simulator: Invalid opcode 0xffff at address 0x003838
AVR Simulator: Invalid opcode 0xffff at address 0x000839
AVR Simulator: Uninitialized stack pointer used at 0x0045
AVR Simulator: Invalid opcode 0xffff at address 0x003838
AVR Simulator: Invalid opcode 0xffff at address 0x000839
AVR Simulator: Uninitialized stack pointer used at 0x0052
AVR Simulator: Invalid opcode 0xffff at address 0x003838
AVR Simulator: Invalid opcode 0xffff at address 0x000839
AVR Simulator: Invalid opcode 0xffff at address 0x000c03

Anbei der Code, komisch finde ich die sache mit dem stackpointer, den 
ich ganz am anfang initialisiert habe und die sache mit dem invalid 
opcode, keine ahnung wo der herkommen soll, weil bei 0x0045 richtiger 
opcode steht.Die Meldungen kommen auch nur, wenn ich im debug Modus Run 
etwas länger laufen hatte. Liegt das am Avr Studio oder an meinem 
fehlerhaften code???

bin für jede kritik bezüglich des codes offen.
Angehängte Dateien:
Gast #933785
Lesenswert?

hallo

habe mal die datei compeliert und es funktioniert ohne Fehlermeldung.
aber sone meldung hatte ich auch schon mal weiß aber nicht mehr in 
welchen zusammenhang diese meldung aufgetreten ist.

habe in AvrStudio einfach eine neues Projekt angelegt und den Code 
hineinkopiert dann compeliert.

gruß gast
Gast #937338
Lesenswert?

Hi

>habe high und low bei der initialisierung groß geschrieben und es kommen
>keine meldungen mehr. vorerst, habe das schon mal gehabt und am nächsten
>tag kamen wieder neue stackpointer meldungen.

Den AVR-Assembler interessiert Groß/Kleinschreibung überhaupt nicht. 
Also noch mal: Welcher Controller ist bei 'Debug->Select Platform and 
Device' eingetragen?

MfG Spess
Gast #937379
Lesenswert?

wo kann man den denn noch einstellenl, außer bei project settings, mal 
abgesehen davn, läuft der auch nicht richtig auf dem richtigen avr, aber 
wenn ich alles durchrechne, komme ich auf keinen fehler. Entweder ich 
übersehe etwas oder das ist kein fehler meinerseits, sondern ein bug im 
avr studio.
Gast #937436
Lesenswert?

Hallo,

Deine Daten im Codesegment habe ich mit entsprechenden .orgs auf gerade 
Adressen gelegt, aber auch das ändert nichts. Die Hamming-Tabelle ist 
129 Einträge lang - ist das korrekt?

Hat nichts mit dem von Dir geschilderten Problem zu tun:

kurzen4:
  clr r19
  ldi r19,2
Wenn ich nichts übersehen habe, ist "clr r19" redundant.

Aber das eigentliche Problem bleibt ungelöst. Ich hatte zunächst 
gedacht, dass Deine .db Tabellen eine zu große Zeilenlänge haben (weiß 
nicht, was für den "Assembler 2" die Obergrenze ist), aber auch das hat 
sich nicht bestätigt.

Ich habe den ATmega8535 noch nie selbst verwendet; vielleicht ist etwas 
in den zugehörigen Definitions-Dateien nicht in Ordnung? Rätselhaft.

Gruß

  risu
Gast #937553
Lesenswert?

Hi

Ich hatte gestern Abend das Programm nur ein Stück mit 'F11' geteste. 
Deshalb ist der Fehler nicht aufgetreten. Heute ist mir folgendes 
aufgefallen:

stufex:          ld a1,X+        ;X+1
                 add r26,punkte      ;zweiten wert laden
                 adc r27,punkte2      ;X+n/2-1
                 ld a2,X
                 rcall takeahalf      ;Werte halbieren da sonst die 
Register überlaufen
                 mov r18,a2
                 sub a2,a1
                 mov cos,a2
->               st X,a2
                 sub r26,punkte
                 sbc r27,punkte2      ;X-n/2-1
                 sbiw X,1        ;X-1
                 add a1,r18
                 st X+,a1        ;X+1

An der Stelle mit dem Pfeil ist plötzlich X=$000A. Diese Adresse ist 
r10. Damit wird e2 überschrieben. Das ist also ein Programmfehler.

MfG Spess
Gast #937571
Lesenswert?

Hi

Und weisst du auch, was das heisst: Der Assembler hängt an jede 
.db-Zeile eine 0 an. Damit ist deine Tabelle hinfällig.
In solchen Zeilen muss die Anzahl der Bytes geradzahlig sein!!!!!!!!!!!!

MfG Spess
Gast #937580
Lesenswert?

Hi

Man sollte auch Warnungen beachten. Trotzdem bekomme ich auch bei deinem 
neuen Programm  bei Befehlen wie 'st X,r17' X-Werte, die nicht im RAM 
liegen (X<$0060).
vermutlich wird irgendwo der Stackpointer zerschossen. Ich hoffe, dir 
ist bewusst, daß du mit X,Y,Z den gesamten RAM inclusive r0..r31 und 
IO-Register adressieren kannst.

MfG Spess
Gast #937589
Lesenswert?

ich glaube, dass der fehler zu dumm war. ich habe nämlich vergessen, den 
X-pointer vor dem speichern des realteils nach der komplexen 
multiplikation um n/2-1 zu erhöhen

        add r28,punkte
  adc r29,punkte2

  st Y,r17
  sub r28,punkte
  sbc r29,punkte2

  mov r16,r18
  mov r17,sin

  rcall mult        ;b0*b1

  mov r17,raus1
  sub r17,r16        ;a0a1-b0b1

      ->add r26,punkte      ;X+n/2-1
      ->adc r27,punkte2
  st X,r17
  sub r26,punkte
  sbc r27,punkte2

so wie ich dass beim Y-pointer gemacht habe.
jetzt kommen auch keine fehler mehr, da der X-pointer nicht auf 
addressen außerhalb des ram's zeigt.
Gast #937597
Lesenswert?

HI

@risu  Da .db-Anweisunge immer an einer Word-Adresse liege ergibt sich 
automatisch eine gerade Byteadresse.
Wie ich schon geschrieben hatte bekomme ich beim Simulieren, speziell 
bei RAM-Zugriffen über X, Adressen <$60. Das passiert immer dann, die 
StackFehler-Meldungen kommen.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren