Отключить аппаратные прерывания
#include <sys/neutrino.h>void InterruptDisable( void );
libc
Функция InterruptDisable() отключает все аппаратные прерывания. Может вызваться из потока или из обработчика прерывания.
Любой системный вызов приводит к включению прерываний, многие библиотечные функции используют системные вызовы. Замаскированные прерывания это не затрагивает. |
Перед вызовом этой функции поток должен запросить привилегии ввода-вывода, вызвав:
ThreadCtl( _NTO_TCTL_IO, 0 );
Если поток этого не сделает, он может получить SIGSEGV
при вызове InterruptDisable().
Для повторного включения прерываний вызывается InterruptEnable().
Эта функция отключает все аппаратные прерывания и необходимо снова включить их так быстро, насколько это возможно. Невыполнение этого требования может привести к увеличению задержек при получении прерываний и нарушению работы в режиме реального времени. |
Используйте InterruptDisable() вместо ассемблерной инструкции cli
, чтобы обеспечить совместимость с не-x86 процессорами.
Используйте InterruptLock() и InterruptUnlock() вместо InterruptDisable() и InterruptEnable(). Функции InterruptLock() и InterruptUnlock() предназначены для многоядерных SMP систем и позволяют потоку с обработкой прерывания выполняться на любом ядре (или процессоре для многопроцессорных систем). |
ЗОСРВ «Нейтрино»
InterruptEnable(), InterruptLock(), InterruptMask(), InterruptUnlock(), InterruptUnmask(), ThreadCtl()
Предыдущий раздел: Описание API системной библиотеки