В процессе обработки прерывания по
} // прерывания
void main()
{
TIMOLD = getvect(TIMVEC); // Сохранение старого вектора
setvect(TIMVEC,TIMINT); // Установка нового вектора
// на функцию TIMINT
setvect(TIMVEC, TIMOLD); // Восстановление старого вектора
}
В процессе обработки прерывания по цепочке имеется один нюанс. Дело в том, что старый обработчик прерывания, доступный по вектору, ожидает, что его выполнение начнется после выполнения процессором входа в прерывание. Поэтому транслятор при вызове функции по указателю - вектору прерывания - эмулирует это прерывание, благо для этого необходимо только дополнительно загрузить в стек регистр флагов процессора.
(*TIMOLD)(); // Эмуляция прерывания по старому вектору
// Сохранение флагов в стеке и вызов функции
// по указателю
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий