|
Нужно только принять для себя несколько постулатов:
1. Всегда в самом начале программы запрещать прерывания,нициализовать порты, тормозить таймеры и, разумеется, указатель стека.
2. Тогда из любой глубокой подпрограммы (в т.ч. прерывательской) можно делать jmp 0. Все переустановится на исходные позиции.
Однако, есть процы, у которых запрос прерывания должен заканчиваться
командой reti , потому что она сбрасывает нутряной недоступный бит, разрешающий дальнейшие прерывания. Т.е. такой проц имеет флаг режима норм.работа/прерывание. Он устанавается аппаратно при входе в прерывание и сбрасывается командой reti.
Тогда в прерывании надо достать из стека адрес возврата и подменить его на нули. Reti отдаст управление на 0.
В Atmele этого нет, но технологию подмены адресов возврата надо знать(тогда сможете делать интересные и чертовски запутанные программные трюки).
E-mail: info@telesys.ru