WDT срабатывает вряд ли, так как я его не включаю. Переполнение стека - вполне возможно, но дело в том что у меня переменных огромных размеров нет. Ну а код, то могу предоставить полный проект, он не большой. Подключаемый модуль, это обработка двух кнопок (hardScanKey и keyboard). Если в файле hard.c в обработчике прерывания таймера 2 закомментировать строку systemFlag.KEYSCAN_FLAG = 1; и в основном цикле сделать условие if(systemFlag.TIMER0_FLAG), то сброс пропадает и программа работает нормально.
Плюс я обнаружил в каком месте программы происходит сброс. Это -
if(channelDetect[3])
{ countOnChannel[3]++;
countOnChannel[0] = 0; countOnChannel[1] = 0; countOnChannel[2] = 0;
if(countOnChannel[3] == 50)
{ hardLedsIndication(RED_LIGHT, RED_LIGHT, RED_LIGHT, GREEN_LIGHT);
countOnChannel[3] = 0;
}
}
файла hard.c функции void hardShowChannel(void)