Выход из прерывания в заданое место

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

 Возможно ли выйдти из функции внешнего прерывания , вызванного нажатим кнопки, в конкретную точку програмы (ну  или хотябы в начало цикла)?

Нужно некое подобие оператора goto, к сожалению он в функции прерывания не работает.

 

tsostik
Offline
Зарегистрирован: 28.02.2013

В рамках вайринга - вряд ли.

В рамках AVRGCC в коде прерывания можно ассемблером достать из стека адрес возврата и положить туда новый.

Но граблей при этом вагон, лучше имхо внутри прерывания глобальный флаг поставить, а по циклу раскидать его проверок и goto/continue.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Можно если только в стеке подменить значение индексного регистра

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Лучше найти другое решение, поскольку граблей будет предостаточно, даже если найдете вариант. Согласен с tsostik

Уж лучше разрешить прерывания, вызвать внешнюю функцию (куда Вы хотите выйти по goto, т.е. оформить это место как функцию), а потом выйти из прерывания. Стек немного может пожрать (что можно в принципе посчитать) из-за вложенных прерываний, но зато всё будет культурней.