中断服务程序不能直接调用

时间:2017-05-15 10:11:20

标签: c++ gcc g++ kernel interrupt-handling

我试图在不使用汇编//Faults: void DivideByZero(struct cpu_state *state); void Debug(struct cpu_state *state); 的情况下用C ++编写中断处理程序。

以下代码: INIT / idt.cpp:

__attribute__((interrupt)) void DivideByZero(struct cpu_state *state)
{
    Text::Clear();
    Text::Simple::Write("FAULT!");
    abort();
}

__attribute__((interrupt)) void Debug(struct cpu_state *state)
{
    Text::Clear();
    Text::Simple::Write("FAULT!");
    abort();
}

等等。

中断/处理/ stubs.h:

__attribute__((interrupt))

等等。

中断/处理/ fault_irs.cpp:

void set

等等。

问题是GCC告诉我,我无法直接拨打ISR。但我不直接打电话,是吗?我是否还必须在{{1}}中定义{{1}}?

如果我将stubs.h中的参数设置为void?

,它会有帮助吗?

有趣的是,第一个错误被gcc接受......

像gcc这样的接缝让我把所有的isr都放在一个单独的文件中......如果我在中断/处理程序/ irq_irs.cpp中做同样的事情就行了....

也许是一个额外的解释为什么我不想简单地使用单个中断处理程序:如果我使用单个IH,我将不得不使用一个switch-case调用正确的函数来处理中断(因为我无法将所有处理代码放在处理程序中,我必须使用单独的函数)。这有很大的开销,并没有让事情变得更简单......即使我真的需要为256个中断创建一个文件......

0 个答案:

没有答案