====== OSA : OS_EnterInt ======
**OS_EnterInt ()**\\
=== ===
{{osa:ref:attr_call_int.png|Разрешен вызов только в прерывании}}
Должен вызываться при входе в прерывание. Большинство сервисов в 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
}
=== См. также ===
----
* [[osa:ref:services:alphabetical|Алфавитный указатель]]
* [[osa:ref:services:brieflist|Все сервисы]]
~~UP~~