www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik komme bei den warnungen nicht weiter


Autor: Fred (Gast)
Datum:
Angehängte Dateien:

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

Autor: gast (Gast)
Datum:

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

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, werde das mal probieren, und auch auf dem avr selbst, liegt wohl 
an dem AVR-Studio

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert,  bie mir nicht so, habe den code in ein neues projekt 
kopiert, aber die Meldungne kommen beim Debuggen immer noch.

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß gerade nicht, wie das bei Assembler ist, aber kannn es sein, 
dass das daran liegt, dass low, high, sph und spl klein geschrieben 
sind? Also bei C könnte es daran liegen;)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Läuft bei mir problemlos
Hast du im Simulator den richtigen AVR ausgewählt?

MfG Spess

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dussel wrote:
> Ich weiß gerade nicht, wie das bei Assembler ist, aber kannn es sein,
> dass das daran liegt, dass low, high, sph und spl klein geschrieben
> sind? Also bei C könnte es daran liegen;)

Quark. Bei C hat man überhaupt nichts mehr mit dem Stackpointer zu tun.

Autor: risu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich kann nur die Beobachtung von Spess bestätigen, dass dieser "Stack 
Pointer Fehler" vom AVR-Studio genau dann ausgegeben wird, wenn man man 
nicht in allen Einstellungen den selben AVR auswählt.

Gruß

  risu

Autor: Fred (Gast)
Datum:

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

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
immer wenn ich den simulator neu starte kommen diese meldungen obwohl 
ich den code geändert habe.

Autor: spess53 (Gast)
Datum:

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

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
atmega8535

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und als debug platform avr simulator

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
außerdem ist es komisch, dass ständig andere addressen im programm als 
AVR Simulator: Uninitialized stack pointer used at 0x0061 angezeigt 
werden

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Das irritiert mich. Ich habe dein File kopiert. Ein Projekt erzeugt und 
das File als Entry File deklariert. Assembliert und 'Start Debugging' 
angeklickt. No Problem.

MfG Spess

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe da mal einen breakpoint gemacht und gemerkt, dass die 
fehlermeldungen erst kommen, wenn ich das programm einige zeit laufen 
habe. selbst bei run und ohne breakpoint.

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt kommt AVR Simulator: Uninitialized stack pointer used at 0x004b
AVR Simulator: Invalid opcode 0xffff at address 0x008888

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
risu wrote:
> Hallo,
>
> ich kann nur die Beobachtung von Spess bestätigen, dass dieser "Stack
> Pointer Fehler" vom AVR-Studio genau dann ausgegeben wird, wenn man man
> nicht in allen Einstellungen den selben AVR auswählt.

Immernoch.

Autor: Fred (Gast)
Datum:

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

Autor: risu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der von Dir beobachtete Fehler ist bei mir reproduzierbar (AVRStudio 
4.14 Build 589). Mal sehen, ob ich etwas finde.

Gruß

 risu

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts in dem Code irgendwo eine Startadresse? Ich vermisse ein "org".

Autor: risu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christoph,

ich habe zum Testen ein ".org 0" eingebaut -- trotzdem tritt der Fehler 
auf. Der "Assembler 1" gibt viele, viele Fehlermeldungen; vielleicht 
kommt man dadurch weiter.

Gruß
  risu

Autor: risu (Gast)
Datum:

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

Autor: risu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

vielleicht gibt es ein Problem mit der Datei "ATmega8535.xml"? In diesem 
Forum gibt es einige Experten dafür (hallo Jörg Wunsch und andere!).

Gruß
  risu

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaub, dass ich den code mal für mega 8 modifizieren werde um zu 
sehen, was los ist. den atmega8535 hatte ich hier zu hause und wollte 
das mal ausprobieren. Danke für die vielen antworten

Autor: Fred (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
anbei nochmal den code wie er jetzt von mir benutzt wird

Autor: spess53 (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HI

>anbei nochmal den code wie er jetzt von mir benutzt wird

Kommen bei dir keine Warnungen beim Assemblieren?

MfG Spess

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur bei den lookuptables

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der fehler von spess53 konnte ich nicht beobachten.

Autor: spess53 (Gast)
Datum:

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

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wusste ich nicht, habe das erste mal mit lookup tables gearbeitet

Autor: spess53 (Gast)
Datum:

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

Autor: risu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Spess und Fred,

bei meinen Tests habe ich die Tabellen auf gerade Adressen gelegt und 
eine geradzahlige Anzahl von Elementen benutzt - der Fehler trat 
trotzdem auf.

Gruß

 risu

Autor: Fred (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der code funktioniert dank der behebung des fehlers jetzt einwandfrei. 
muss diese teil mal gelöscht haben, weil ich eigentlich vor hatte die 
ganze sache mit 16bit zu machen.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Zum Test setzt einfach einen Data-Breakpoint auf X. Da wird das Programm 
angehalten, wenn auf X zugegriffen wird. Im Processor-Tab kann der Wert 
von X überprüft werden.

MfG Spess

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.