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