我希望能够在一个地方编写我的 ISR:
some_collection TimerHandlers;
// added to ISR table in linker script
void rawTimerIRQHandler() {
call_each_handler_in(handlers);
}
这样我就可以在其他文件中注册处理程序
// file1.cpp
void ledTimerHandler1() {
}
register(ledTimerHandler1); //or in an init function if not possible here
// file2.cpp
void ledTimerHandler2() {
}
register(ledTimerHandler2); //or in an init function if not possible here
当硬件跳转到 时,rawTimerIRQHandler
它会以任意顺序执行。ledTimerHandler1
ledTimerHandler2
显然,我可以使用类似于 a 的东西来实现它vector<void(*)()>
,但是由于这些处理程序的数量在编译时是已知的,有什么方法可以在编译时生成数组(或模板链表)?我想避免vector
.
我愿意使用template<>
、#define
甚至 GCC 特定的属性来实现这个目标。