вызов функции прерывания против нормальной функции - PullRequest
0 голосов
/ 11 марта 2019

В микроконтроллере, как компилятор различает функцию прерывания и любую другую функцию, как, например, в прерывании Rb0 в pic16f877, когда значение флага изменяется, он вызывает функцию прерывания, почему он не вызывал никакую другую функциюв коде.

1 Ответ

2 голосов
/ 11 марта 2019

Я думаю, что вы имеете в виду процедуру обработки прерываний, когда ссылаетесь на interrupt function. ISR - это функция C, которая помечена для вставки в таблицу векторов аппаратных прерываний.

Вот пример:

void __interrupt Rb0_Isr(void);

или ( ссылка )

unsigned int  interruptcnt;
unsigned char second;

void timer0 (void) interrupt 1 using 2  {
    if (++interruptcnt == 4000)  {    /* count to 4000 */
        second++;                       /* second counter    */
        interruptcnt = 0;               /* clear int counter */
    }
}

Как видите, это зависит от платформы и от компилятора.

РЕДАКТИРОВАТЬ: спасибо @ThomasMatthews за замечание. ISR также могут быть реализованы на C ++. Если вопрос: Is it possible to use a class method as the Interrupt Service Routine? ответ - да, но немного сложнее. Смотрите тему: C ++ ISR с использованием метода класса?

...