Aktivering af genstart af overvågningstimersystem og ventetid i en sløjfe indtil nulstilling er en legitim måde at SW nulstille µC på, som ved hjælp af vagthund til at fange µC's dårlige opførsel, hvilket kan være forårsaget af forskellige årsager.
Imidlertid er nogle der skal træffes forholdsregler, når du bruger nulstilling af overvågningssystem, fordi på alle AVR'er, der også har overvågning, afbryder overvågningshunden med prescaler indstillet til 0000 = 16 ms forbliver aktiv efter overvågning af overvågningssystemets system. Det er derfor en programmerings ansvar at rydde MCUSR og at deaktivere vagthundtimeren så hurtigt som muligt efter forekomst af en sådan tilstand. Da LPM-rutiner til initialisering af .data- og .bss-sektioner kan vare længere end watchdog-timeoutintervallet, skal koden til deaktivering af vagthunden placeres i .init3 sektion og indholdet af MCUSR kan eventuelt gemmes til senere nulstilling af kildeundersøgelse. Her er koden, der gør det beskrevne:
uint8_t mcusr_copy __attribute__ ((afsnit (".noinit"))); ugyldig deaktiver_wdt (ugyldig) \ __attribut __ ((nøgen)) \ __attribute __ ((afsnit (". init3"))); ugyldig deaktiver_wdt (ugyldig) {mcusr_copy = MCUSR; MCUSR = 0x00; wdt_disable ();}
Problemet kan dog opstå, når du bruger en bootloader, der ikke tager højde for muligheden for nulstilling af overvågningssystemet. Hvis det er tilfældet, vil watchdog-timeout ske inden i bootloader (som udføres den første), før ovenstående kode har mulighed for at deaktivere watchdog-timeren, og µC sidder fast i en endeløs reset-loop. Siden nulstilling af µC vil ikke rydde WDRF flag i MCUSR registreres (det kan kun ryddes i software eller ved nulstilling af tænding) den eneste måde vil derefter være at skifte strøm og uploade en ny kode, når vagthundtimeren stadig ikke er aktiveret af den foregående kode. WDRF i MCUSR -registret skal ryddes inden wdt_disable ()
, fordi WDE ikke kan ryddes, hvis WDRF er stadig indstillet - derfor er rækkefølgen af instruktionerne i ovenstående kode meget vigtig. Funktionen placeret i sektionen .init3 må ikke kaldes fra senere kode.