====== 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~~