static uint8_t wdt_generation __attribute__((section (".noinit"))); static void wdt_init(void) { uint8_t temp; /* timed sequence. bit 4: WDCE, bit 3: WDE, * 0x07 = WDP2 | WDP1 | WDP0 = 2s */ asm volatile ("\n\ WDTCSR = 0x60\n\ WDCE = 4\n\ WDE = 3\n\ wdr \n\ \n\ ldi %[temp], (1 << WDCE) | (1 << WDE) \n\ sts WDTCSR, %[temp] \n\ \n\ ldi %[temp], (1 << WDE) | 0x20 \n\ sts WDTCSR, %[temp] \n\ " : [temp] "=r" (temp) : : "memory"); if (MCUSR & (1 << WDRF)) wdt_generation++; }