Atmel ICE200 + AVR_Studio 3.6 spinnt beim debuggen?

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 31 10 2024  00:24:45      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Atmel ICE200 + AVR_Studio 3.6 spinnt beim debuggen?

    







BID = 116288

chilla

Schreibmaschine



Beiträge: 1403
Wohnort: von hier zwei mal rechts und dann zwei mal links
 

  


Hi Jungs (und Mädls...),

hätte da mal wieder ein eigenartiges Problem:

also, ich hab vor längerer Zeit mal ein elektronisches Türschloss für einen AT90S1200 programmiert, und eine Entsprechende Schaltung mit Tastatur und Relais drangebaut.

so, das ganze hat dann irgendwie Softwaremässig nicht ganz so funktioniert wie ich wollte...

naja, dann hab ich mir jetzt, ein paar monate später einen ICE200 debugger zugelegt;

so, nun zu meinem eigentlichen Problem:

das Einlesen, welche taste gedrückt wird funktioniert noch problemlos, die entsprechende Ziffer wird dann in ein Register geladen, auf das der Z-Pointer (r30) zeigt.
nach jeder eingabe wird der Z-ptr um eins inkrementiert. Soweit so gut, doch bei der Simulation:

nach jeder Eingabe wird nach dem Loslassen der Taste zur Entprellung das Prog mit folgendem Code für ca. 100 ms angehalten:



Code :


;***************
;kurze Delaytime
;***************

DELAY_SHORT:
clr r20
clr r19
DS_WAIT:
nop ;Zusätzlichen Systemtakt warten
inc r20 ;r20 hochzählen
cpi r20, $FF ;schon Überlauf?
breq DS_UEBERLAUF ;wenn ja, Überlauf handeln
rjmp DS_WAIT ;sonst Weiterzählen#
DS_UEBERLAUF:
clr r20 ;r20 rücksetzen
inc r19 ;Überlauf-Zähler erhöhen
cpi r19, $FF ;schon 256 Überläufe?
breq DS_ENDE ;wenn ja, Routine verlassen
rjmp DS_WAIT ;und nochmal zählen
DS_ENDE:
ret



So, nun wird aber beim Durchlauf (Simulation!!) dieser Schleifen r30 (Z-ptr) auf unerklärliche Weise auf 0 zurückgesetzt!
Dann hab ich den Inhalt von r30 vor dem Eintritt in das Unterprogramm in ein tmp-Register zwischengespeichert, und auch ausgerechnet dieses wurde (als einziges "normales" Register ausser dem r30) gelöscht, wobei ich es in meinem Programm ja nicht verwendet hab!!!!
(probiert mit r12 u r13)

beim Single stepping trat dieses Phänomen natürlich nicht auf, aber ich ahab auch nicht alle Schleifendurchläufe gestepped...


wisst ihr da rat?

Danke fürs lesen,

mfg CHillA

_________________
Wenn man erst einmal die Sache verstanden hat, kapiert man auch, wies im Handbuch gemeint war.

Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet wer

[ Diese Nachricht wurde geändert von: chilla am 19 Okt 2004 20:39 ]

BID = 116293

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

 

  

Da gibts verschiedene Möglichkeiten:
Du machst keinen Call zu deiner Routine, dann erfolgt der Rücksprung nach irgendwo in die Galaxis,
du hast zu viele Calls geschachtelt, was einen Stack Überlauf, bzw. wraparound bei diesem µC, ergibt,
du hast den Watchdog enabled, ohne eine Routine dafür zu haben,
ein Interrrupt ohne ISR tritt auf,
oder, wenn ein Interrupthandler vorhanden ist, verursacht der den Stack Überlauf.


Außerdem, aber das hat mit dem eigentlichen Problem nichts zu tun, finde ich, daß du das unheimlich umständlich programmiert hast.

_________________
Haftungsausschluß:

Bei obigem Beitrag handelt es sich um meine private Meinung.

Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.

Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !

[ Diese Nachricht wurde geändert von: perl am 19 Okt 2004 20:50 ]

BID = 116297

chilla

Schreibmaschine



Beiträge: 1403
Wohnort: von hier zwei mal rechts und dann zwei mal links

Danke für die Tipps!
im einzelnen:


Zitat :
Du machst keinen Call zu deiner Routine, dann erfolgt der Rücksprung nach irgendwo in die Galaxis,
nein;

Zitat :
du hast zu viele Calls geschachtelt, was einen Stack Überlauf, bzw. wraparound bei diesem µC, ergibt,
auch nicht.

Zitat :
du hast den Watchdog enabled, ohne eine Routine dafür zu haben,
hm, schon interessanter! also ich hab ihn nicht enabled, der ist doch standartmäßig aus, oder?
werde ich nachprüfen!

Zitat :
ein Interrrupt ohne ISR tritt auf,
oder, wenn ein Interrupthandler vorhanden ist, verursacht der den Stack Überlauf.
hm, höchstens vielleicht ein ungewollter Timer-Interrupt...
werde ich ebenfalls nachprüfen.

bis dahin beschäftigt mich aber immernoch die Frage, warum die im ganzen Programm ungenutzen Register gelöscht werden, wenn ich sie als tmp-Register verwende;
alle anderen Register bleiben unberührt....

Danke soweit, bis ich nährere Infos hab;

mfg CHillA

_________________
Wenn man erst einmal die Sache verstanden hat, kapiert man auch, wies im Handbuch gemeint war.

Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet wer

BID = 116351

Jornbyte

Moderator



Beiträge: 7162

Warte 100 ms bei 4 MHz:

ldi R17, $97
LOOP0: ldi R18, $06
LOOP1: ldi R19, $92
LOOP2: dec R19
brne LOOP2
dec R18
brne LOOP1
dec R17
brne LOOP0
nop


_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 116398

ERDI-Soft

Stammposter



Beiträge: 200
Wohnort: Offenburg
Zur Homepage von ERDI-Soft ICQ Status  

Hi,

mich machen gerade die $FF stutzig. Dachte, der Atmel Assembler beherrscht nur 0xFF.
Kann das jetzt leider nicht nachprüfen, da das AVR-Studio (ich nehme mal an, du benutzt das zum programmieren?) ja leider immer noch nicht für Linux erschienen ist. :(

_________________
Wie immer gilt: Erst googeln, dann fragen!

(Für ICQ bitte erst Anfrage per PM, da alles andere nicht angenommen wird.)

BID = 116401

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

Doch das ist legal:

Zitat :


Integer constants: constants can be given in several formats, including
Decimal (default): 10, 255
Hexadecimal (two notations): 0x0a, $0a, 0xff, $ff
Binary: 0b00001010, 0b11111111
Octal (leading zero): 010, 077


Aber ohne daß man das Programm sieht, kann man natürlich nicht sagen, warum das Z-Register alles überschreibt. Wird schon einen Grund haben.

_________________
Haftungsausschluß:



Bei obigem Beitrag handelt es sich um meine private Meinung.



Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.



Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !

BID = 116779

chilla

Schreibmaschine



Beiträge: 1403
Wohnort: von hier zwei mal rechts und dann zwei mal links

@Jornbyte:
Danke für den Tipp; sieht eleganter aus!

@perl:
Du hattest natürlich recht! Ein versehentlich nicht abgeschaltener Interrupt hat alles durcheinander gebracht, und das ganze Programm zum Reset gebracht, bei den Initialisierungen wurden dann die Register gelöscht...

das ich auf sowas nicht selbst komm...

Danke nochmal!

mfg CHillA

_________________
Wenn man erst einmal die Sache verstanden hat, kapiert man auch, wies im Handbuch gemeint war.

Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet wer


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 24 Beiträge im Durchschnitt pro Tag       heute wurden bisher 0 Beiträge verfasst
© x sparkkelsputz        Besucher : 182260147   Heute : 39    Gestern : 4669    Online : 413        31.10.2024    0:24
1 Besucher in den letzten 60 Sekunden        alle 60.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0581710338593