К примеру, имеется ATmega16, несколько кнопок. Одна из кнопок должна выполнять функцию старта, паузы выполнения кода. Другая в качестве стопа, при чем не должны сбиваться настройки, которые устанавливаются другими кнопками по мере работы устройства, т.е. reset в данном случае не подойдет. Main состоит практически из одной основной функции, которая вызывает десяток-другой других функций, работает с кучей переменных, содержит множество циклов. Реализовал задуманное следующим способом: две вышеуказанные кнопки являются инициаторами прерываний int0, int1. Сама основная функция (не main) выполняется по условию cikle_job_status==1(переменная для индикации состояния: 1- в работе, 2- на паузе, 0 - еще не запущена, остановлена). Так же внутри каждого цикла и еще в куче мест выполняется проверка на условие (cikle_job_status==1) . Как только условие не выполняется, оператором return выполнение программы прекращается.
собственно код:
Спойлер
Код: Выделить всё
ISR (INT0_vect)
{
cikle_job_status = 3; //останавливаем работу программы
}
ISR (INT1_vect)
{
if (cikle_job_status ==1)
{
cikle_job_status =2; //переводим в паузу
}
else
{
cikle_job_status = 1; //заставим работать
}
}
void pausa()
{
while (cikle_job_status==2)
{
_delay_ms(1);
}
}
//////////////////
дальше объявления кучи функций
//////////////////
main (){
тут кучка функций с настройками и т.п.
while(1)
{
/////
тут отслеживание нажатий других кнопок для настройки и прочие мелочи выполняются
/////
MY_BIG_function()
{
while (perem==1)
{
тут перед каждым вызовом функций, внутри каждого цикла и т.п. проверка на условие
if (cikle_job_status==1)
{
выполняем код
}
else if (cikle_job_status==2)
{
pausa();
}
else
{
return; //прекращаем выполнение функции
}
}
cikle_job_status =0; //переводим в ноль чтоб повторно не стала выполняться
}
}
Так вот вопрос: есть ли какие-либо стандартные средства в микроконтроллерах, чтоб можно было поставить выполнение программы на паузу на неопределенное время?? А то много лишних действий контроллеру приходится выполнять, жалко время, которое он тратит на проверки и т.п.



