Watchdog Reset beim Mega88 - Flag auswerten?

OP #828103
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe einen Bootloader geschrieben, der nur aktiviert werden soll, 
wenn das Watchdogresetflag WDRF im MCUSR gesetzt ist. Bisher nutzte ich 
den Mega8, wo ich einfach schreiben konnte
1
 if(MCUCSR&(_BV(WDRF)))...
(hat einwandfrei funktioniert)
Beim Mega88 hab ich es jetzt so versucht:
1
#include <stdint.h>
2
#include <avr/wdt.h>
3

4
 uint8_t mcusr_mirror;     //this turns off wdt on a soft reset
5

6
    void get_mcusr(void) \
7
      __attribute__((naked)) \
8
      __attribute__((section(".init3")));
9
    void get_mcusr(void)
10
    {
11
      mcusr_mirror = MCUSR;
12
      MCUSR = 0;
13
      wdt_disable();
14
    }

und entsprechend am Anfang von main:
1
if(mcusr_mirror&(_BV(WDRF)))...

Leider funktioniert das nicht. Wenn ich PORTD=mcusr_mirror setze, 
scheint mcusr_mirror=0 zu sein. Was mache ich falsch?

Achja, benutze WINAVR mit gcc 3.4.6

Vielen Dank für Eure Hilfe!

Gruß, Thomas

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.