OSA : OS_EnterInt

OS_EnterInt ()

Разрешен вызов только в прерывании

Должен вызываться при входе в прерывание. Большинство сервисов в OSA работают через косвенную адресацию. Этот сервис сохраняет значение FSR (для PIC18 сохраняется FSR0). Это уберегает его от случайного изменения кодом прерывания.

Должен вызываться в самом начале обработчика прерывания, сразу после описания внутренних переменных.

Нельзя пренебрегать сохранением FSR в прерывании, даже если есть уверенность, что компилятор не изменяет этот регистр. дело в том, что небольшое изменение кода может привести к тому, что компилятор сочтет более оптимальным способ работы с использованием FSR-регистра, а сохрянять его не будет.

Разрешен вызов:

Только из прерывания

Параметры функции:

Нет

Возвращаемое значение:

Нет

Пример вызова:

void interrupt isr (void)
{
    static char a;
    OS_EnterInt();    // Сохраняем FSR
    /*...*/
    // Обработка всех прерываний
    /*...*/
    OS_LeaveInt();    // Восстанавливаем FSR
}
 
// Если присутствуют два обработчика прерываний, то
// в каждом нужно вызывать сервисы сохранения/восстановления FSR
void low_priority interrupt isrlo (void)
{
    static int i;
    OS_EnterInt();    // Сохраняем FSR
    /*...*/
    // Обработка всех прерываний
    /*...*/
    OS_LeaveInt();    // Восстанавливаем FSR
}

См. также