Вопрос о прерывании по пину

znv74
Offline
Зарегистрирован: 14.02.2018

Доброго времени суток. Я новичёк, знаю мало, зарание извеняюсь если сильно туплю)

Возможно ли прерыванием по пину вернуть исполнение программы к началу "void loop"?

Стоит ли вобще идти в этом направлении или попытаться другими средствами?

Управление идёт с ИК пульта и при подаче новой команды,

продолжать исполнение кода не имеет смысла, а он продолжается до логического

завершения и достаточно долго, а хотелось бы вернуться к началу "void loop" игнорируя код

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Нет, прерывание приостанавливает работу программы, делает некоторую работу, после чего возвращает управление в ту точку, где программа была приостановлена.

Соответственно, прерывание может установить флаг, который будет проверять основная программа, и при обнаружении, что флаг установлен, она сама уже должна вернуться к началу (а вернее - к концу) loop().

znv74
Offline
Зарегистрирован: 14.02.2018

Спасибо большое!

А была надежда, много времени мог потерять,

пока не понял что в этом направлении копать безнадёжно.

nik182
Offline
Зарегистрирован: 04.05.2015

Можно по прерыванию сделать сброс и тогда через setup окажешся в начале loop.

Можно почистить стек, сбросить признак прерывания и сделать goto в начало loop. 

Может ещё что нибудь можно, но если точнее описать проблему, то возможно найдётся и более элегантное решение. 

znv74
Offline
Зарегистрирован: 14.02.2018

И вам спасибо,

Сброс конечно вариант только с одной загвоздкой около секунды до loop.

Второй попробую изучить, возможно сгодится, но я пока не всё понимаю, буду пробовать.

Третий вариант - не хочу никого утомлять своим балавством,

я просто эксперементирую и на уровне чайника)))

Ставлю себе задачи и пытаюсь выполнить, учусь...

Но если что годное получится обязательно выложу.

nik182
Offline
Зарегистрирован: 04.05.2015

Незачто. А вообще в нутри любого долго выполняемого кода всегда можно найти место для проверки флага. В прерывании его выставить, в коде по флагу просто перейти в начало loop.  

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

znv74 пишет:

пока не понял что в этом направлении копать безнадёжно.

Ну, почему безнадёжно. Коллега просто жалеет Вас и не говорит про "жесткие" (не для новичков) средства, которыми Вы сможете не просто докопаться до возврата в начало, в "закопать себя с головой". Но они есть. Хотите "по-мужски", валяйте. Гуглите функции setjmp / longjmp - они Ваше фсё!