Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выход из прерывания
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
valeraro
Здравствуйте.
Возможно ли выйти из прерывания (к примеру по INT0) в определенное место основной программы (асм)?
Dmitry Dubrovenko
Теоретически возможно, но "конструкция" может получится довольно сложная (всё зависит от конкретной программы).
zhevak
Цитата(valeraro @ Jun 12 2013, 13:50) *
Возможно ли выйти из прерывания (к примеру по INT0) в определенное место основной программы (асм)?

Да, возможно.

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

Только обычно так не делается, ну, в смысле -- в нормальных программах. Если у Вас возникли такие мысли, то либо Вы что-то делаете не совсем так, либо преднамеренно хотите ввести людей (и себя в том числе!) в заблуждения и заставить совершать лишнюю работу.

В общих словах -- отлаживать такие проги будет довольно-таки сложновато. А если учесть, что через какое-то время (скажем, через год) Вам, возможно, придется вернуться к исходным кодам программы и что-там изменить, то сами представьте себе как это будет непросто понять -- "а что же я тут хотел изобразить?"

Рекомендую погуглить на тему разработки программ по принципу K.I.S.S. и понять, имеет ли вообще смысл извращаться или нет. И каких при этом следует ожидать осложнений.
valeraro
Спасибо, решил по другому.
zombi
Цитата(valeraro @ Jun 12 2013, 10:50) *
Возможно ли выйти из прерывания (к примеру по INT0) в определенное место основной программы (асм)?
Конечно можно.
А если это сигнал пропадания питания то даже нужно.
Я так делаю при выключении изделия для быстрого перехода в спячку.
В стек нужный адрес и выход.
ILYAUL
Так хорошо работать в подпрограммах МЕНЮ , на каждом шаге подменяя адрес перехода для кнопок
V_G
Цитата(zombi @ Jun 12 2013, 23:08) *
Я так делаю при выключении изделия для быстрого перехода в спячку.
В стек нужный адрес и выход.

Ну-ну.
А если прерывание пришло во время работы девайса в подпрограмме (или в туче вложенных), то стек кончится быстро-быстро. Даже если в нужной точке указатель стека всегда сбрасывается, может быть туча неучтенных нюансов.
Единственное, что я себе позволяю в подобных случаях - полный программный ресет. Причем еще до возврата, прямо в процедуре обработки прерывания сбоя питания
zombi
Цитата(V_G @ Jun 13 2013, 02:53) *
Ну-ну... может быть туча неучтенных нюансов.

ТС задал конкретный вопрос можно или нет. Причём здесь нюансы?
Непомнящий Евгений
Цитата(zombi @ Jun 13 2013, 07:35) *
ТС задал конкретный вопрос можно или нет. Причём здесь нюансы?


ТС хочет странного, возможно он не понимает последствий или не знает других путей sm.gif Ему и пытаются объяснить...
Dmitry Dubrovenko
Цитата(Непомнящий Евгений @ Jun 13 2013, 09:27) *
ТС хочет странного, возможно он не понимает последствий или не знает других путей
ТС уже давно сказал, что он всё решил другим путём. biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.