Может ли быстрый обработчик прерываний вызвать функцию не быстрого обработчика прерываний? - PullRequest
0 голосов
/ 03 февраля 2020

Если у меня есть быстрый обработчик прерываний (добавив __attribute__((interrupt("FIQ")))), могу ли я вызвать другую функцию не быстрого прерывания внутри обработчика? Например,

void f() {//...}
void g() {//...}
void handler() __attribute__((interrupt("FIQ"))) {
    // ...
    f();
    g();
    // ...
}

У меня обработчик быстрого прерывания, настроенный так же, как в примере выше, и он не работает, как предполагалось. Я использовал gdb для трассировки через обработчик и обнаружил, что вещи помещаются в стек во время вызова функции f и никогда не выталкиваются (аналогично g). Тогда в послесловии обработчика выскочил регистр связи из стека.

...