Забыл. Напомните, пожалуйста. Если во время работы одного прерывания, сработало другое по алгоритму программы, то после его обработки, работа программы продолжится с места, откуда он ушел в прерывание(в первом прерывании)?
ILYAUL
Dec 5 2011, 20:40
Цитата(max_mart @ Dec 6 2011, 00:35)
Забыл. Напомните, пожалуйста. Если во время работы одного прерывания, сработало другое по алгоритму программы, то после его обработки, работа программы продолжится с места, откуда он ушел в прерывание(в первом прерывании)?
Да , вернётся в первое прерывание. Но так же помните , что в Tiny и Mega при входе в прерывание бит I сбрасывается, в Xmega нет
demiurg_spb
Dec 6 2011, 05:20
1. Базово (при запрещённой вложенности прерываний), в avr8 обработка текущих запросов на прерывания происходит непрерывно друг за другом согласно их приоритетам. 2. Ну а если у вас разрешены вложенные прерывания, то возникшему прерыванию нет никакой разницы кого прерывать: фоновую программу или ISR (приоритет уже выполняемой ISR не имеет никакого значения).
Возврат из любого прерывания всегда будет осуществлён в точку его вызова плюс единичка (PC=PC+1) с гарантированным выполнением инструкции находящейся по адресу точки возврата (грубо: что сейчас в PC то и выполняется в данный момент времени).
Таким образом, даже при "залипшем" прерывании, фоновая программа будет худо-бедно выполняться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.