Помощь - Поиск - Пользователи - Календарь
Полная версия: Резиденты. Запрет прерываний.
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Altair
Когда надо запрещать все прерывания, когда изменяем таблицу прерываний, или уже когда наш обработчик что-то выполняет?
CJ
Наверно программно через Пас, никак, может ошибаюсь.
Но если теретически, то необходимо просто перехватить запрос на прерывание, и... Что нить с ним сделать, отклонить как нибудь.
Altair
Через пас можно - ASM CLI END;
Только когда делать это,
Вот скелет резидента:

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

Так вот, где в нем надо обрамить в запрет и разрешение прерываний?
CJ
А каким образом ОБРАМИТЬ?
Altair
Я имею ввиду какой кусок кода должен выполняться С ЗАПРЕЩЕНИЕМ ВСЕХ ПРЕРЫВАНИЙ.
обрамить - CLI (запрет прерываний) и еще есть команда разрешения их.
BlackShadow
Менять вектор можно без CLI, если он один. Если ты меняешь стадо векторов, а твоя прога рассчитанана то, что замена происходит "в один такт", то лучше обрамить и этот момент. А внутри своего обработчика аппаратного прерывания это просто необходимо.
Altair
Угу, все спасибо.
FreeMan
Команда разрешения прерываний - STI
Dark
Я бы лучше и когда один изменял бы - устанавливал запрет...
BlackShadow
Замена происходит в 1 операцию (если делать грамотно). Во время выполнения операции INT'ы явно не генеряться.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.