Они не обязательно совпадают с вашим статусом в первой точке ISR: прерывания являются асинхронными и поэтому должны каким-то образом «прерывать» работу основного процессора (процессоров).
Например, давайте посмотрим на этот MIPS код украшенной с адресами, которые не делают ничего полезного:
4000. add $1, $2, $3
4004. sw $ra, 0($sp)
4008. jal subr # function call, sets $ra to 4012 and jumps to 4024
4012. lw $ra, 0($sp)
4016. jr $ra
4020.
4024. subr: sub $2, $1, $3
4028. jr $ra
Этот код может быть handeled от основного процессора: арифметические операции (строки 1, 7) выполняются арифметическим устройством, доступом к памяти (строки 2, 4) контроллером памяти, а переходы (строки 3, 5, 8) выполняются также основным процессором. (Фактический адрес jal
установлен во время связывания объектного файла.)
Это для вызовов функций.В любое время определяется, где код прямо сейчас и какой код выполняется в следующий момент времени (т. Е. Когда счетчик программ увеличивается: ПК + = 4).
Теперь наступает момент, когда ваши функции выполняют что-то сложное, но вы все еще хотите, чтобы программное обеспечение реагировало на ход клавиши. Затем вступает в игру так называемый сопроцессор. Этот сопроцессор ждет, пока не произойдет какое-либо событие (например, ключевой штрих на клавиатуре), а затем вызовет обработчик прерываний. Это блок кода, расположенный на определенном адресе в памяти.
Подумайте, процессор находится в вычислении выше, но в то же время вы хотите сохранить количество нажатий клавиш по адресу keys
. Затем вы пишете программка, начиная с адреса 0x80000180
(это определяется как адрес Exeption обработчика в MIPS):
lw $at, keys
addi $at, $at, 1
sw $at, keys
eret
Теперь, что происходит при нажатии клавиши?
- сопроцессора получает в курсе нажатий клавиш
- В настоящее время ПК основного PROCESOR сохраняется
- ПК основного процессора устанавливается на 0x80000180, код прерывания исполняется
- На
eret
в ПК установлен на ПК основного процессора до того, как произошло прерывание.
- Выполнение основной прогаммы продолжается.
Здесь есть переход от нормального выполнения, чтобы прервать обработку между шагами 2 и 3 и обратно от 4 до 5.
Примечания: Я упростил это много, но это должно быть ясно, как прерывания отличаются от вызовов функций и того, как аппаратное обеспечение должно иметь дополнительные возможности для обработки прерываний.
К сожалению, я не могу предложить онлайн ресурсы, что, так как это зависит от письменного сценария для компьютерных систем;) – contradictioned
Так же это означает, что для микропроцессор типа 8051 или микроконтроллер 8091, который не имеет сопроцессора, будет иметь прерывания и вызовы функций как одинаковые? Пожалуйста, помогите мне, я действительно смущен –
Я не эксперт по микроконтроллерам, но на этом сайте представлена блок-схема 8051: http://aninditadhikary.wordpress.com/tag/intel-8051/, где вы можете увидеть «Контроль прерываний», который расположен рядом с процессором, аналогично сопроцессору mips. – contradictioned