Atmel ICE200 + AVR_Studio 3.6 spinnt beim debuggen? Im Unterforum Microcontroller - Beschreibung: 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
|
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
|
|
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 23 Beiträge verfasst © x sparkkelsputz Besucher : 182259381 Heute : 3943 Gestern : 5486 Online : 502 30.10.2024 20:30 5 Besucher in den letzten 60 Sekunden alle 12.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0380351543427
|