Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек СРВ от Анн.doc
Скачиваний:
11
Добавлен:
09.11.2019
Размер:
2.26 Mб
Скачать
  1. Дополнение к существующему прерыванию

Хотя и не часто, но бывает полезно добавить код к существую­щему прерыванию. В качестве примера рассмотрим программы, которые преобразуют одно нажатие клавиши в длинные определяемые пользова­телем символьные строки (макроопределения клавиатуры). Эти прог­раммы используют тот факт, что весь ввод с клавиатуры поступает через функцию 0 прерывания 16Н BIOS. Все прерывания ввода с кла­виатуры DOS вызывают прерывание BIOS для получения символов из буфера клавиатуры. Поэтому необходимо модифицировать лишь преры­вание 16Н таким образом, чтобы оно служило шлагбаумом для макро­определений, после чего любая программа будет получать макроопре­деления независимо от того, какое прерывание ввода с клавиатуры она использует.

Рис. 8. Дополнение к существующему прерыванию

Модифицировать прерывания BIOS и DOS непросто (BIOS в ПЗУ, а DOS поступает без описания, и они ограничены размерами отведенной для них памяти), но можно написать процедуру, которая предшеству­ет и/или следует за соответствующим прерыванием, и эта процедура может вызываться при вызове прерывания DOS или BIOS. Например, в случае прерывания 16Н необходимо написать процедуру и указать вектором прерывания для 16Н. Оригинальное значение вектора 16Н тем временем переносится в какой-либо неиспользуемый вектор, ска­жем 60Н. Новая процедура просто вызывает прерывание 60Н, чтобы использовать оригинальное прерывание 16Н; поэтому, когда программа вызывает прерывание 16Н, управление передается вашей процедуре; она затем вызывает оригинальное прерывание 16Н, которое по завер­шении снова возвращает управление вашей процедуре, а из нее вы возвращаетесь в то место программы, откуда поступил вызов преры­вания 16Н. На рис. 8 показана диаграмма данной процедуры.

Таким образом, краткая сводка необходимых действий выглядит следующим образом:

  1. Создать новую процедуру, вызывающую прерывание 60Н.

  2. Перенести вектор прерывания для 16Н в 60Н.

  3. Изменить вектор 16Н, чтобы он указывал на новую процедуру.

  4. Завершить программу, оставляя ее резидентной

Лекция 17 Синхронные методы проектирования срв

План лекции:

  1. Система упорядоченного опроса

  2. Основной цикл с прерываниями

  1. Система упорядоченного опроса

Мы будем рассматривать три синхронных метода: упорядоченного опроса (без прерываний), основного цикла с прерываниями цикли­ческих планировщиков. Как мы уже упоминали, синхронные методы тре­буют наличия только одного и задачи в системе для их реализации.

Система упорядоченного опроса состоит из главного цикла, в течение которого все устройства последовательно опрашиваются (или вызываются нужные процедуры) по одному. Программа для упрощенной системы домашнего контроля использует эту структуру, что демонс­трируется программой.

В этой программе слова "wait_loop" обозначают программный цикл, в котором происходит ожидание в течение некоторого времени. В общем случае может потребоваться вводить "передышки" в системы опроса. Для того, чтобы понять необходимость введения таких "пе­редышек", рассмотрим пример управления управляемой компьютером автомашины. Предположим, что компьютер решил повернуть машину в право и выдал команду: "поворот направо". Колеса начали выполнять поворот, но в этот момент, предположим, компьютер продолжает про­верять и оценивать входные данные с все большей скоростью. И компьютер продолжает считать, что машина еще не поворачивает и повторно посылает команду поворота вправо. Прежде чем осознать, что машина уже поворачивает, компьютер успевает выдать несколько команд "поворота вправо", что приведет к заносу машины. Чтобы из­бежать подобной ситуации компьютер должен быть так запрограммиро­ван, чтобы он имел возможность делать паузы после выдачи команд для их выполнения. Но в случае управления домашним хозяйством такие паузы недопустимы, так как обнаружение пожара требует немед­ленных, а не "отложенных" действий, как уже было упомянуто выше.

; ref_level - опасный уровень дыма forever:

call adjust_temp ;вызов стандартной подпрог-

;раммы

in al , smoke_port ;получить значение уровня

; дыма

cmp al , ref__level ;проверка наличия опасности

jl no_danger

call initiate_a1arm ;включить сигнал тревоги no_danger

call water_lawn ;вызов стандартной подпрог-

;раммы

call wait_loop ;пауза (отсутствие действий)

jmp forever wait_loop:

mov ex, Offh ;значение в сх определяет

;время ожидания wait :

loop wait

ret

Преимуществами описанного метода являются: простая конструкция системы . быстрое время ответа.

Недостатками же являются следующие:

. процессор всегда находится в занятом состоянии, поскольку он полностью посвящен опросу портов

. время циклов может стать чрезмерным по мере возрастания количества опрашиваемых устройств

. время тратится на опрос портов, большую часть времени на­ходящихся в неактивном состоянии, например, датчиков дыма в нашем примере.