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
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.
Karl heinz Buchegger schrieb: > Passt doch perfekt. > Ab an den Reset Pin damit und dein µC wird ebenfalls resettet. Stimmt, nur die Software wird momentan auf einem STK500 Board entwickelt. Da kann ich nicht mal schnell die Hardware umstricken(ich weiß dass das die Perfekte lösung wäre) :)
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.
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
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.
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 Ich brauche einen Reset z.B. nach Programmierung mittels eines Bootloaders! Springe ich nach 0000 kommt da nur murks bei raus,
Im Bootloader schon alles zerkonfiguriert ? Wenn ein Watchdog nicht drinliegt, wuerd ich die relevanten Register vor Ende des Bootloaders neu beschreiben.
>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.
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
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.
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.