AVR Software-Reset

OP #1937782
Lesenswert?

Hallo Leute,

ich hab die Suche schon ausprobiert und nichts Sinnvolles zu meiner 
Frage zu Tage befördert.

Es geht darum, dass ich mir einen Software-Reset auslösen will.

Hintergrund ist: Ich habe am µC ein Gerät hängen. Sobald sich das Gerät 
Resettet, wird eine Spannung von High nah low gezogen.
Diese Spannung möchte ich überprüfen und bei Bedarf meinen µC resetten.

Meine Idee war, dass ich mir einfach die Spannung auf den INT0 Pin lege 
und sobald das Gerät neu gestartet wird, löst es bei mir einen Interrupt 
aus. Das funktioniert auch soweit.

Anschließend wollte ich im MCUCSR - Register das EXTRF flag setzen. Das 
funktioniert nicht. Auch nicht wenn ich das Flag lösche.

Nun ist meine Frage: gibt es eine möglichkeit einen richtigen 
Software-Reset auszulösen, ohne den Watchdog dafür zu verwenden.

Wie zuverlässig funktioniert folgende Methode: Den INT0 zwar zu 
initialisieren, aber Garkeine ISR dazu zu schreiben. Weil das löst auch 
einen Reset aus. Nur stellt sich die Frage: Funktioniert das immer? Kann 
mir dabei der µC kaputt gehen? Gibt es dadurch andere Probleme?


Grüße Tarkan
Angehängte Dateien:
#1937787
Lesenswert?

Tarkan D. schrieb:
> Hallo Leute,
>
> ich hab die Suche schon ausprobiert und nichts Sinnvolles zu meiner
> Frage zu Tage befördert.
>
> Es geht darum, dass ich mir einen Software-Reset auslösen will.

Gut.
Du wirst schon wissen, warum deine Software auch einen Reset machen muss 
und warum es nicht reicht, einfach die Init Sequenz erneut zu 
durchlaufen.


> Hintergrund ist: Ich habe am µC ein Gerät hängen. Sobald sich das Gerät
> Resettet, wird eine Spannung von High nah low gezogen.

Passt doch perfekt.
Ab an den Reset Pin damit und dein µC wird ebenfalls resettet.
(Firma: TravelRec.) Persönliche Seite #1937879
Lesenswert?

Tarkan D. schrieb:
> Wie zuverlässig funktioniert folgende Methode: Den INT0 zwar zu
> initialisieren, aber Garkeine ISR dazu zu schreiben. Weil das löst auch
> einen Reset aus.

Falsch. Das löst keinen RESET aus sondern springt auf die RESET-Marke 
(oder halt auf die in dem Vektor angegebene Adresse). Die einzig 
sinnvolle und echte Auslösung eines RESET ist es, den Watchdog zu 
benutzen. Nur so werden alle I/O-Register korrekt von der Hardware 
initialisiert.
#1938015
Lesenswert?

Solange das Programm weiß, was es tut, besteht überhaupt kein Grund, ein 
Reset zu machen. Man kann jeden beliebigen Zustand erreichen ohne ein 
Reset.
Erst wenn ein Programm Amok läuft, weil der Programmierer einen Fehler 
gemacht hat, muß man ein Reset machen.

Deinen PC startest Du ja auch nicht ohne Not neu, z.B. wenn eine E-Mail 
eintrifft.
Solange die PC-Software ordnungsgemäß läuft, kannst Du alle gewünschten 
Anwendungen ausführen und wieder beenden ohne ein Reset.


Peter
Gast #1938034
Lesenswert?

Peter Dannegger schrieb:
> Solange das Programm weiß, was es tut, besteht überhaupt kein Grund, ein
> Reset zu machen. Man kann jeden beliebigen Zustand erreichen ohne ein
> Reset.
> Erst wenn ein Programm Amok läuft, weil der Programmierer einen Fehler
> gemacht hat, muß man ein Reset machen.

Nur als Vervollständigung: Es gibt auch diverse Controller die 
Hardwarefehler aufweisen. Eher die Ausnahme aber ist alles schon 
vorgekommen. Hier könnten Resets tatsächlich interessant werden. 
Allerdings gehören die AVRs eher nicht zu dieser Sorte da sie sehr 
ausgereift sind.
Gast #1938507
Lesenswert?

>Ich brauche einen Reset z.B. nach Programmierung mittels eines
>Bootloaders! Springe ich nach 0000 kommt da nur murks bei raus,

Ein Sprung nach 0000 ist aber nun mal kein echter Reset.
Hast du die Interruptvektoren für den Bootloader umgebogen?
Dann musst du die zu Fuß auch wieder geradebiegen. Sauber
ist es per Watchdog oder du nimmst einen Pin der aus dem
Bootloader raus den Resetpin runterzieht.
#1938525
Lesenswert?

Andy H. schrieb:
> Ich brauche einen Reset z.B. nach Programmierung mittels eines
> Bootloaders! Springe ich nach 0000 kommt da nur murks bei raus,

Interessant.
Ich komme mit einem Reset nie aus dem Bootloader raus.
Das Reset ist ja dauerhaft zum Bootresetvektor umgeleitet.
Ich muß nach 0x0000 springen, um die Applikation zu starten.

Ich benutze daher das Reset, um in den Bootloader zu gelangen.
Ein Softwareupdate ist aber auch keine normale Betriebsart der 
Applikation, das erfordert auch beim PC oftmals ein Reset.


Peter
(Firma: TravelRec.) Persönliche Seite #1938654
Lesenswert?

Peter Dannegger schrieb:
> Interessant.
> Ich komme mit einem Reset nie aus dem Bootloader raus.
> Das Reset ist ja dauerhaft zum Bootresetvektor umgeleitet.
> Ich muß nach 0x0000 springen, um die Applikation zu starten.

Ich brauche da auch kein Reset für. Die eigentliche Applikation sollte 
nicht davon ausgehen, aus einem Controller zu starten, der alles 
initialisiert hat. Die Applikation sollte daher alle benutzte Peripherie 
und den RAM vor der Main erstmal sauber einrichten.

Peter Dannegger schrieb:
> Ich benutze daher das Reset, um in den Bootloader zu gelangen.

Ich auch.

Peter Dannegger schrieb:
> Ein Softwareupdate ist aber auch keine normale Betriebsart der
> Applikation, das erfordert auch beim PC oftmals ein Reset.

Najaaa, wenn alles sauber programmiert ist, braucht man den Reset 
wirklich nur, um den Bootloader aufzurufen. Dies kann man dann auch aus 
der Applikation heraus per Watchdog machen, wenn ein Programmupdate zur 
Laufzeit gewünscht wird.

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