Вопрос о прерывании по пину
- Войдите на сайт для отправки комментариев
Ср, 14/02/2018 - 00:38
Доброго времени суток. Я новичёк, знаю мало, зарание извеняюсь если сильно туплю)
Возможно ли прерыванием по пину вернуть исполнение программы к началу "void loop"?
Стоит ли вобще идти в этом направлении или попытаться другими средствами?
Управление идёт с ИК пульта и при подаче новой команды,
продолжать исполнение кода не имеет смысла, а он продолжается до логического
завершения и достаточно долго, а хотелось бы вернуться к началу "void loop" игнорируя код
Нет, прерывание приостанавливает работу программы, делает некоторую работу, после чего возвращает управление в ту точку, где программа была приостановлена.
Соответственно, прерывание может установить флаг, который будет проверять основная программа, и при обнаружении, что флаг установлен, она сама уже должна вернуться к началу (а вернее - к концу) loop().
Спасибо большое!
А была надежда, много времени мог потерять,
пока не понял что в этом направлении копать безнадёжно.
Можно по прерыванию сделать сброс и тогда через setup окажешся в начале loop.
Можно почистить стек, сбросить признак прерывания и сделать goto в начало loop.
Может ещё что нибудь можно, но если точнее описать проблему, то возможно найдётся и более элегантное решение.
И вам спасибо,
Сброс конечно вариант только с одной загвоздкой около секунды до loop.
Второй попробую изучить, возможно сгодится, но я пока не всё понимаю, буду пробовать.
Третий вариант - не хочу никого утомлять своим балавством,
я просто эксперементирую и на уровне чайника)))
Ставлю себе задачи и пытаюсь выполнить, учусь...
Но если что годное получится обязательно выложу.
Незачто. А вообще в нутри любого долго выполняемого кода всегда можно найти место для проверки флага. В прерывании его выставить, в коде по флагу просто перейти в начало loop.
пока не понял что в этом направлении копать безнадёжно.
Ну, почему безнадёжно. Коллега просто жалеет Вас и не говорит про "жесткие" (не для новичков) средства, которыми Вы сможете не просто докопаться до возврата в начало, в "закопать себя с головой". Но они есть. Хотите "по-мужски", валяйте. Гуглите функции setjmp / longjmp - они Ваше фсё!