es mov b [di], ':'
nopt:
sub di, 2
es mov b [di], dl
sub di, 2
es mov b [di], al
loop l3
mov flag, 0
l2:
mov al, cnt ;проверка окончания времени отображения на экране системного
cmp al, maxcnt ;времени
jne l1
restv 08, old_v ;восстановление ВП системного таймера
restv 060, old_v1 ;восстановление пользовательского ВП
mov ah, 04c
int 021 ;завершение выполнения программы
i060_hnd:
inc sec ;циклы проверок правильности счета времени в формате чч:мм:сс
inc cnt
cmp sec, 60 ;секунды <= 60
jne end_060
mov sec, 0
inc min
cmp min, 60 ;минуты <= 60
jne end_060
mov min, 0
inc hour
cmp hour, 24 ;часы <= 24
jne end_060
mov hour, 0
end_060:
mov flag, 1
iret
i08_hnd:
push ax, ds
mov ds, cs ;установка доступа к данным процедуры
inc cntr ;увеличение значения счетчика прерывании
cmp cntr, 18 ;проверка на прохождение 1 минуты (~990 мсек)
jne l10
mov cntr, 0 ;обнуление счетчика прерывании
int 060 ;вызов пользовательского прерывания
l10:
pop ds, ax
cs jmp old_v ;передача управления исходному обработчику
Результат выполнения программы – вывод текущего системного времени. В верхнем левом углу экрана. По истечении количества секунд, заданного в maxcnt, программа завершает работу.
3. Исследование аппаратных прерывании в ОС QNX
В отличие от DOS, в QNX реализован интерфейс пользователя и контроллера прерываний на основе механизма API. То есть существует некоторый набор функций, макроопределений и других средств, которые позволяют управлять системой прерываний средствами языков высокого уровня, выполняя при этом такие операции, как маскирование прерываний. Принципиальным отличием от DOS является то, что некоторые средства QNX являются специфическими для многозадачной операционной системы.
Рассмотрим основные функции API для работы с прерываниями.
#include <sys/neutrino.h>
int InterruptAttach( int intr, const struct sigevent * (*handler) (void*, int), const void* area, int size,
unsigned flags);
Используется для постановки в соответствие обработчика источнику прерывания.
intr номер прерываний, которое требуется перехватить
handler указатель на функцию - обработчик прерывания
area указатель на пространство связи, которое выделяется для обработчика процессом
size размер пространства связи
flags флаги, которые указывают на специфику перехвата прерывания:
_NTO_INTR_FLAGS_END - понижение приоритета указанного обработчика относительно других обработчиков;
_NTO_INTR_FLAGS_PROCESS - ставить в соответствие обработчику не тред, но отдельный процесс;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.