我试图在不使用汇编//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个中断创建一个文件......