Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 68 69 70 71 72 73 74  75 76 77 78 79 80 81 ... 198
                        ;                или нет

                   mov   ah,2ch         ; функция считывания времени
                   int 21h              ; обращение к DOS при возврате
                                        ; cx содержит часы и минуты
                   mov   bl,watering    ; началось ли орошение?
                   test  bl,1           ;
                   jz    start_or_not     нет, тогда начать орошение
                   mov   dh,stop_hours  ; не пора ли кончить поливку?
                   mov   dl,stop_mins   ; сравнивать со временем ос-
                                          танова
                   cmp   cx,dx          ; пора прекратить орошение?
                   jl    exit       ; нет,пусть орошение продолжается
                   mov   watering,0     ; орошение прекращено
                   mov   al, stop_code  ; вывести код останова
                   out   water_port, al ; через water_port
                   ret                  ; выполнено
            start_or_not:
                   mov   dh,start_hours ; время начала находится в DX
                   mov   dl,start_mins  ;
                   cmp   cx,dx          ; пора ли начать орошение?
                   jl    exit           ; нет еще
                   mov   watering,1     ; да, орошение началось
                   mov   al,start_code  ; вывести код пуска
                   out   water_port,al  ; через water_port
            exit:
                   ret                  ; выполнено
         ----------------------------------------------------------------

              В этой программе предполагается, что время остановки (значе-
         ние "stop_hours:stop_mins") больше времени начала орошения  (зна-
         чения   "start_hours:start_mins).  Глобальная булевая  переменная
         "watering" используется здесь таким образом, что сигнал на запуск
         или останов поливки должен выдаваться только один раз в день.
             Теперь, когда у нас есть индивидуальные  процедуры управления

                                      - 5-24 -
         нагреванием,  пожарной тревогой и орошением газонов, давайте про-
         ведем исследование требований ко всей системе. Температуру следу-
         ет регулировать повторно каждые несколько минут.  Сигнал пожарной
         тревоги должен раздаваться сразу же после обнаружения  огня  (или
         дыма) - здесь недопустима задержка!
              Газон должен орошаться ежедневно в течение двух часов  начи-
         ная  с 18.30.  Мы предположили,  что соответствующие устройства и
         преобразователи для ввода/вывода данных уже связаны с процессором
         через интерфейс. Теперь мы готовы обсудить общую конструкцию сис-
         темы реального времени для упрощенного  управления  домашним  хо-
         зяйством.
              Мы будем рассматривать три синхронных метода: упорядоченного
         опроса (без прерываний),  основного цикла  с  прерываниями  цикли-
         ческих планировщиков. Как мы уже упоминали, синхронные методы тре-
         буют наличия только одного и задачи в системе для их реализации.

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

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

                         Листинг 5-5. Программа ref_level
         ----------------------------------------------------------------
                   ; ref_level - опасный уровень дыма
            forever:
                   call    adjust_temp     ;вызов стандартной подпрог-
                                           ;раммы
                   in      al, smoke_port  ;получить значение уровня
                                           ;дыма
                   cmp     al, ref_level   ;проверка наличия опасности
                   jl      no_danger
                   call    initiate_alarm  ;включить сигнал тревоги
            no_danger:
                   call    water_lawn      ;вызов стандартной подпрог-

                                      - 5-25 -
                                           ;раммы
                   call    wait_loop       ;пауза (отсутствие действий)
                   jmp     forever
            wait_loop:
                   mov     cx, 0ffh        ;значение в cx определяет
                                           ;время ожидания
            wait:
                   loop    wait
                   ret
         ----------------------------------------------------------------

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

              Недостатками же являются следующие:
            . процессор всегда находится в занятом состоянии, поскольку он
              полностью посвящен опросу портов
            . время циклов может стать чрезмерным по мере возрастания  ко-
              личества опрашиваемых устройств
            . время тратится на опрос портов,  большую часть времени нахо-
              дящихся  в неактивном состоянии,  например,  датчиков дыма в
              нашем примере.

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

              Структуру метода основного цикла с прерываниями можно  расс-
         матривать  как  систему  опроса с прерываниями.  Как и в случае с
         чистой системой опроса,  в этом методе используется понятие  "ос-
         новного цикла".  Во время этого цикла может ничего не делаться, а
         может что-то выполняться,  что будет прерываться так  часто,  как
         того  требуют  внешние  устройства или часы (таймер).  Как только
         возникает какое-либо событие,  прерывание посылается в процессор.
         Отдельная  стандартная  программа  обслуживания  прерывания (ISR)
         связывается с каждым видом прерывания.
              Давайте вернемся к примеру упрощенной системы управления до-
         машним хозяйством.  В нашем примере прерывания  разработаны  так,
         что работа процессора прерывается, когда:
            1. температура  выходит за  пределы диапазона от (ref_temp -
               - delta) до (ref_temp + delta)
            2. уровень дыма выходит за пределы безопасности.

              Процедуры adjust_temp и  initiate_alarm  представляют  собой
         две программы ISR,  соответствующие указанным двум видам прерыва-
         ний.
              В общем случае прерывание не может быть связано с процедурой
         water_lawn,  потому что эта процедура использует функцию прерыва-
         ния "int 21h" операционной системы MS-DOS для определения времени
         суток. Поскольку программа операционной системы MS-DOS не являет-
         ся реентерабельной, программа ISR не может произвести другое пре-
         рывание  в  операционной  системе   MS-DOS.   Поэтому   процедура
         water_lawn не разрабатывается в виде программы ISR, но вызывается
         из главного программного цикла main_loop:

          forever:
              call    water_lawn   ;
              call    wait_loop    ; для протекания некоторого времени

                                      - 5-26 -
                           ; до повторного вызова процедуры water_lawn
              jmp     forever

              Стандартные программы  обслуживания  прерываний   называются
         adjust_temp и initiate_alarm. Текст программы ISR такой же, что и
         для уже описанных процедур, со следующей разницей:

            1. Программа ISR использует команду IRET вместо команды
               RET в  обычной  процедуре.  Команда IRET осуществляет
               возврат управления в главную программу по завершении
               выполнения программы ISR.
            2. Вы должны сохранять регистры, используемые программой
               ISR. Регистры  должны восстанавливаться до выполнения
               команды IRET.
            3. Прерывания должны разрешаться/запрещаться.

              Программа adjust_temp  должна разрешать использование преры-
         ваний.  В противном случае сигнал об обнаружении дыма  может  ос-
         таться  нераспознанным,  что неприемлемо.  Аналогично,  программа
         initiate_alarm должна запрещать управления,  потому что она явля-
         ется  процедурой  наивысшего  приоритета  и не должна прерываться
         вплоть до возбуждения сигнала о пожаре.
              Указанные программы  ISR должны быть связаны с соответствую-
         щими уровнями прерываний.  Связь эта может быть реализована через
         функцию  "Установить  вектор  прерываний"  в операционной системе
         MS-DOS. Функция прерывания "int 21h" с кодом функции в AH=25h ис-
         пользуется для этой цели. DS:DX указывает на программу ISR до вы-
         полнения запроса.

                   mov     ah,25h        ; функция= установить вектор
                                         ;          прерываний
                   mov al,int_level      ; уровень  прерываний   в   AL
                   mov dx,seg adjust_temp
                   mov ds,dx             ; адрес программы ISR в DS:DX
                   mov dx,offset adjust_temp
                   int 21h               ; обращение к операционной
                                         ; системе DOS

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

              Недостатками этого подхода являются:
            . сложное взаимодействие между программой ISR  и  главной
              программой
            . сложное  протекание  главной  программы,  что  является
              следствием асинхронной природы возникновения событий.




                                      - 5-27 -
                             Циклические планировщики

              Для того,  чтобы  понять  работу  циклических  планировщиков
Предыдущая страница Следующая страница
1 ... 68 69 70 71 72 73 74  75 76 77 78 79 80 81 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама