бораторных измерений, упрощенные системы роботов и т.д.
Проектирование систем реального времени с использованием
операционной системы MS-DOS
Проектирование систем реального времени с использованием
операционной системы MS-DOS затруднено отсутствием официальной
методологии такого проектирования. Эта нехватка общего подхода
выражается в возникновении таких проблем, как:
1. В работающих системах реального времени могут возникать не-
объяснимые аварийные ситуации или результаты работы будут выгля-
деть странно из-за проблем синхронизации.
2. Существующие реализации указанных систем становятся неуп-
равляемыми вследствие произошедших в них изменений и расширений.
3. Когда процесс программирования системы закончен, нельзя по-
ручится за ее работоспособность в дальнейшем.
- 5-20 -
На рисунке 5-9 представлены методы проектирования систем не-
реального времени. Синхронные методы разработки требуют выполне-
ния только одной задачи в каждой реализации системы. Синхронные
методы могут быть трех типов:
. упорядоченный опрос (без прерываний)
. главный цикл с прерываниями
. циклическое планирование.
Для обеспечения механизма действия каждого из трех указанных
методов мы будем пользоваться примерами и программами на языке
Ассемблер. Мы ограничим наше обсуждение только вопросами проекти-
рования и не будем касаться соображений синхронизации, которое мы
уже обсудили. Режим же мультизадачности будет рассматриваться в
следующем разделе.
ЪДДДДДДДДДДДДДДДДДДД¬
¦ Методы ¦
¦ проектирования ¦
¦ ¦
АДДДДДДДДДВДДДДДДДДДЩ
ЪДДДДДДДДДДБДДДДДДДДДДДД¬
¦ ¦
ЪДДДДДБДДДДД¬ ЪДДДДБДДД¬
¦ синхронные¦ ¦мульти- ¦
¦(однознач- ¦ ¦задачный¦
¦ ные) ¦ ¦режим ¦
АДДДДДДДДДДДЩ АДДДВДДДДЩ
ЪДДДДДДДДДДДДД†ДДДДДДДДДДДД¬
¦ ¦ ¦
ЪДДДДДДБДДДДДД¬ ЪДДДБДДД¬ ЪДДДДБДДДДД¬
¦упорядоченный¦ ¦главный¦ ¦цикличес- ¦
¦опрос (без ¦ ¦цикл с ¦ ¦кое плани-¦
¦прерываний) ¦ ¦прерыва¦ ¦рование ¦
АДДДДДДДДДДДДДЩ ¦ниями ¦ АДДДДДДДДДДЩ
АДДДДДДДЩ
Рис. 5-9. Методы проектирования систем реального времени
Пример упрощенной системы управления домашним хозяйством
Давайте рассмотрим упрощенную систему управления домашним
хозяйством, предназначенную следить за расходом тепла, предупреж-
дать о пожаре и управлять орошением газонов, что показано на ри-
сунке 5-10. Температура регистрируется температурно-чувствитель-
ным устройством. Некоторый преобразователь преобразует
температуру из аналогового в цифровое значение. Это значение мо-
жет быть считано из порта и сравнено с образцовой температурой.
Значение образцовой температуры может задаваться пользователем.
Для простоты давайте будем считать это значение постоянной вели-
чиной с именем ref_temp. Программа adjust_temp, предназначенная
управлять температурами, задана в листинге 5-2. Отметим, что эта
программа содержит только важные части программы. Менее сущест-
венные подробности (такие, как объявление и инициализация пере-
менных) здесь не показаны.
- 5-21 -
образцовая
температура
преобразова- преобразова-
тели тели
от датчика ЪДДДДДДДД¬ ЪДДДДДДДДД¬ ЪДДДДДДДДД¬ к наг-
температур ¦ ¦ ¦ ¦ ¦ ¦ рева-
ДДДДДДДДДДД¦ ¦ДД¦ ¦ДД¦ ¦ДДтелю
АДДДДДДДДЩ ¦ ¦ АДДДДДДДДДЩ
от датчика ЪДДДДДДДД¬ ¦компьютер¦ ЪДДДДДДДДД¬ к сигна-
огня(дыма) ¦ ¦ ¦ ¦ ¦ ¦ лу тре-
ДДДДДДДДДДД¦ ¦ДД¦ ¦ДД¦ ¦ДДвоги
АДДДДДДДДЩ ¦ ¦ АДДДДДДДДДЩ
от таймера реального ¦ ¦ ЪДДДДДДДДД¬ к венти-
времени ¦ ¦ ¦ ¦ лю оро-
ДДДДДДДДДДДДДДДДДДДДДДДД¦ ¦ДД¦ ¦ДДшения
¦ ¦ АДДДДДДДДДЩ газонов
АДДДДДДДДДЩ
Рис. 5-10. Упрощенная система управления домашним
хозяйством
Листинг 5-2. Программа adjust_temp
----------------------------------------------------------------
adjust_temp:
; delta- для избежания колебаний температур
; ref_temp- значение образцовой температуры
; temp_port- порт, через который выводится
; информация по управлению
температурой
; inc_cod- сегмент программы для повышения
температуры
; dec_code- сегмент программы для снижения
температуры
; read_port- порт, через который ведется
; считывание значений текущей
температуры
in al,read_port ; считать температуру в AL
mov bl,ref_temp ; получить ref_temp в BL
mov cl,bl ; BL будет использоваться позднее
sub cl,delta ; ref_temp - delta в CL
cmp al,cl ; текущая температура меньше
; ref_temp - delta ?
jl increase ; тогда увеличить температуру
add bl,delta ; ref_temp + delta в BL
cmp al,bl ; текущая температура больше
; ref_temp + delta ?
jg decrease ; тогда уменьшить температуру
ret ; сделано
decrease:
mov al,dec_code ; dec_code
out temp_port,al ; temp_port
ret
increase
mov al,inc_code ;inc_cod подлежит выводу в
out temp_port,al ; temp_port
ret
----------------------------------------------------------------
- 5-22 -
Отметим, что нагревание не меняется, когда температура оста-
ется в пределах диапазона от ( ref_temp - delta) до (ref_ temp +
delta), как это показано на рисунке 5-11. Здесь значение delta
представляет собой маленькую величину допуска (например, в одном
градусе 1F * и он используется для избежания температурных коле-
баний.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
* Один градус по Фаренгейту (1F) приблизительно равен по Цель-
сию 0,56 градуса (0,56 C) (Примеч. переводчика.)
Образцовая температура
(ref_temp)
¦
низкая темпера- ¦ высокая темпера-
тура ¦ДdeltaДД¦ДДdeltaД¦ тура
ДДДДДДДДДДДДДДДДД†ДДДДДДДДДД†ДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДД
повышение температура уменьшение
температуры не меняется температуры
Рис. 5-11. Использование допуска delta небольшой величины
для избежания температурных колебаний
Для того, чтобы понять концепцию колебаний, будем считать,
что значение delta равно нулю. В этом случае температуру следует
корректировать всякий раз, когда она точно не равна значению
ref_temp. Предположим, что температура оказалась немного меньше
значения ref_temp. Теперь при обращении к процедуре будет предп-
ринято действие, повышающее температуру. В результате температура
повысится до значения, превышающего величину ref_temp. Теперь при
очередном вызове процедуры будет предпринято действие, понижающее
температуру. В результате таких действий температура будет то по-
вышаться, то понижаться попеременно. Вот это и называется колеба-
нием температур. Таким образом, применение величины delta (малой,
но не равной нулю) способствует погашению колебаний, потому что
температура не меняется при этом в небольшом диапазоне ref_temp.
Теперь давайте рассмотрим программу по активизации сигнала
пожарной тревоги. Нам следует только послать какой-нибудь сигнал,
который отключит потом сигнал о пожаре. Эта процедура под назва-
нием initiate_alarm представлена в Листинге 5-3.
Листинг 5-3. Программа initiate_alarm:
---------------------------------------------------------------
initiate_alarm:
; alarm_port -порт для подачи сигнала тревоги
; activate_signal - сигнал для активизации
тревоги
mov al,activate_signal
out alarm_port,al
ret
---------------------------------------------------------------
Далее рассмотрим процедуру управления орошением газонов.
Предположим, что нам нужно поливать газоны по вечерам с 18.30 до
20.30. Это требование диктует нам необходимость пользоваться ре-
альным временем, то есть часами. В листинге 5-4 показана такая
- 5-23 -
процедура, имеющая имя water_lawn.
Листинг 5-4. Программа water_lawn
----------------------------------------------------------------
water_lawn:
; start_hours - компонент "часы" начального
; времени
; start_mins - компонент "минуты" начального
; времени
; stop_hours - компонент "часы" конечного
; времени
; stop_miins - компонент "минуты" конечного
; времени
; water_port - порт для управления
; орошением газона
; start_code - программа начала
; орошения
; stop_code - программа окончания
; орошения
; watering - переменная состояния,
; говорящая о том, что
; началось ли орошение