Wenn ich einen ATtiny (hier Tiny25) in den Power-Down Mode schicke und ihn z.B. über den INT0 wieder aufwecke, dann geht es wohl direkt nach dem Sleep-Statement wieder weiter. Soweit OK. Anfangs hatte ich vergessen, die ISR für INT0 zu installieren und dann wird wohl eine Reset durchführt, also wieder vorne angefangen. Meine Frage: ist dies zufällig so und eigentlich ein Seiteneffekt oder kann/darf man das auch gezielt nutzen?
HildeK schrieb: > hatte ich vergessen, die ISR für INT0 zu installieren und dann > wird wohl eine Reset durchführt, also wieder vorne angefangen. ....überleg einfach mal wo er dann hinspringt ;-) der "reset" kann je nach dem auch kein reset, sondern auch andere seltsame verhaltensweisen annehmen....
HildeK schrieb: > Wenn ich einen ATtiny (hier Tiny25) in den Power-Down Mode schicke und > ihn z.B. über den INT0 wieder aufwecke, dann geht es wohl direkt nach > dem Sleep-Statement wieder weiter. Soweit OK. > Anfangs hatte ich vergessen, die ISR für INT0 zu installieren und dann > wird wohl eine Reset durchführt, also wieder vorne angefangen. > > Meine Frage: ist dies zufällig so und eigentlich ein Seiteneffekt oder > kann/darf man das auch gezielt nutzen? Wenn du einen Interrupt auslöst, dann springt der Controller zum entsprechenden Interruptvektor. Ob du eine ISR hast oder nicht. Ganz einfach. Und jetzt schau mal wo der Interruptvektor liegt und dann überleg mal was passiert wenn du keine ISR hast. Ein Reset an sich wird da nicht ausgelöst, lediglich die Programmausfürung beginnt wieder von vorne. Aber ein Reset setzt ja alle Register in einen bestimmten Zustand und das passiert hier NICHT. gruß cyblord
Vielen Dank euch beiden. cyblord ---- schrieb: > Und jetzt schau mal wo der Interruptvektor liegt und dann überleg mal > was passiert wenn du keine ISR hast. Ja, habe ich getan und im Disassemblerlisting vom AVR-Studio gefunden: - der INT0 hat die ADR 0x0001 (Datenblatt). - dort steht (bei fehlender ISR) RJMP PC+0x14, also ein Sprung nach PC=0x0015 - da findet man RJMP PC-0x0015, also einen Sprung nach Adresse 0x0000. Das ist aber der Resetvektor. Daraus schließe ich, dass dies, zumindest mit dem AVR GCC, funktioniert und der Tiny einen astreinen Reset ausführt. cyblord ---- schrieb: > Aber ein Reset setzt ja alle > Register in einen bestimmten Zustand und das passiert hier NICHT. Das wäre demnach aber nicht so. Oder ich habe noch immer eine Verständnislücke.
Anon Ymous schrieb: > springen nach 0x00 != Reset Für ein paar Hinweise, in welche Richtung die Unterschiede gehen, wäre ich dir schon dankbar. Worin liegen die Unterschiede, wenn ich den Reset-Pin bediene oder die SW auf den Resetvektor springt?
HildeK schrieb: > Anon Ymous schrieb: >> springen nach 0x00 != Reset > > Für ein paar Hinweise, in welche Richtung die Unterschiede gehen, wäre > ich dir schon dankbar. > Worin liegen die Unterschiede, wenn ich den Reset-Pin bediene oder die > SW auf den Resetvektor springt? Habe ich doch geschrieben. Ein RESET setzt alle Register im Controller auf einen definierten Wert. Ein Sprung nach 0x00 tut dies nicht. Was ist daran denn nicht verständlich? > Daraus schließe ich, dass dies, zumindest mit dem AVR GCC, funktioniert > und der Tiny einen astreinen Reset ausführt. Diese Schlussfolgerung ist astrein falsch. Mir ist nicht klar wie man auf sowas kommt. Wenn du im Programm nach 0x00 springen willst, dann nimm einfach goto. gruß cyblord
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.