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