what is purpose of the following?
ISR(WDT_vect, ISR_NAKED)
{
// Setup a pointer to the program counter. It goes in a register so we
// don't mess up the stack.
upStack = (uint8_t*)SP;
// The stack pointer on the AVR micro points to the next available location
// so we want to go back one location to get the first byte of the address
// pushed onto the stack when the interrupt was triggered. There will be
// PROGRAM_COUNTER_SIZE bytes there.
++upStack;
// Newer versions of GCC don't like when naked functions call regular functions
// so we use call an assembly gate function instead
__asm__ __volatile__ (
"call appMon_asm_gate \n"
);
}