Здравствуйте. Происходит интересная проблема при срабатывании вотчдога в мк мега2561. В общем когда таймер срабатывает то контроллер сбрасывается, но не перезапускается, а просто виснет (при этом и питание и клок нормальные). Если просто передёрнуть питание или сделать ресет, то всё ровно запускается. Программа элементарная состоит только из активации вотчдога и моргания светодиода. Кто-нибудь сталкивался с такой проблемой?

CODE
void WDT_On(void)
{
__disable_interrupt();
__watchdog_reset();
MCUSR = 0;
//WDTCSR = (1<<WDCE) | (1<<WDE);
//WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0);
WDTCSR = 0x18;
WDTCSR = 0x0F;

__enable_interrupt();
}

__C_task main(void)
{
static unsigned char x;
DDRC |= 1<<PC6;

while(1) {
PORTC ^= 1<<PC6;
_delay_ms(100ULL);
__watchdog_reset();
x++;
if (x == 6)
for (;;) __no_operation();
}
}


Всё решено. Сначала посмотрел этот момент
Цитата
Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or brown-out
condition, the device will be reset and the Watchdog Timer will stay enabled. If the code is not
set up to handle the Watchdog, this might lead to an eternal loop of time-out resets. To avoid this
situation, the application software should always clear the Watchdog System Reset Flag
(WDRF) and the WDE control bit in the initialization routine, even if the Watchdog is not in use.


Но не помогло, а потом дошло, что у меня же бутлоадер, а там флаг WDRF и WDE не обнуляется в начале. Главное интересный момент, что в буте стоит задержка в 100 мсек типа delay перед запуском, а потом идёт сброс вотчдога, а вотчдог настроен в основной программе на 2 сек... и получается что при сбросе он не выключает сам бут, а лишь сбрасывает биты установки скорости которые по умолчанию стоят 16мсек! Такие вот пироги не прописанные в даташите)