我希望能寫我的ISR在一個地方:如何在C++中生成中斷處理程序的編譯時數組?
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
。
很顯然,我可以實現這個使用了一種類似於vector<void(*)()>
東西,但由於這些處理程序在編譯時已知的數量,有沒有什麼辦法,我可以生成一個數組(或模板鏈表)在編譯時?我想避免vector
附帶的動態內存分配。
我願意使用template<>
,#define
甚至GCC特有的屬性來實現這個目標。
[This](http://stackoverflow.com/a/8688526/102441)看起來潛在相關 – Eric 2013-02-28 18:27:30