Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Резиденты. Запрет прерываний.

Автор: Altair 7.06.2004 19:16

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

Автор: CJ 8.06.2004 17:15

Наверно программно через Пас, никак, может ошибаюсь.
Но если теретически, то необходимо просто перехватить запрос на прерывание, и... Что нить с ним сделать, отклонить как нибудь.

Автор: Altair 8.06.2004 17:55

Через пас можно - ASM CLI END;
Только когда делать это,
Вот скелет резидента:

{...}
{$F+}
procedure zamena_prerivania;
begin
{...}
end;
{$F-}
{...}
begin
{...}
end.

Так вот, где в нем надо обрамить в запрет и разрешение прерываний?

Автор: CJ 8.06.2004 19:09

А каким образом ОБРАМИТЬ?

Автор: Altair 8.06.2004 19:35

Я имею ввиду какой кусок кода должен выполняться С ЗАПРЕЩЕНИЕМ ВСЕХ ПРЕРЫВАНИЙ.
обрамить - CLI (запрет прерываний) и еще есть команда разрешения их.

Автор: BlackShadow 11.06.2004 16:23

Менять вектор можно без CLI, если он один. Если ты меняешь стадо векторов, а твоя прога рассчитанана то, что замена происходит "в один такт", то лучше обрамить и этот момент. А внутри своего обработчика аппаратного прерывания это просто необходимо.

Автор: Altair 11.06.2004 16:50

Угу, все спасибо.

Автор: FreeMan 13.06.2004 0:46

Команда разрешения прерываний - STI

Автор: Dark 24.06.2004 11:24

Я бы лучше и когда один изменял бы - устанавливал запрет...

Автор: BlackShadow 25.06.2004 16:04

Замена происходит в 1 операцию (если делать грамотно). Во время выполнения операции INT'ы явно не генеряться.