Chciałbym móc napisać ISR w jednym miejscu:Jak mogę wygenerować tablicę protokołów obsługi przerw w C++?
some_collection TimerHandlers;
// added to ISR table in linker script
void rawTimerIRQHandler() {
call_each_handler_in(handlers);
}
taka, że mogę następnie zarejestrować ładowarki w innych plikach
// 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
a gdy sprzęt przeskakuje do rawTimerIRQHandler
, wykonuje się w kilku dowolnych zamówieniach ledTimerHandler1
i ledTimerHandler2
.
Oczywiście, mogę wdrożyć to używając coś podobnego do vector<void(*)()>
, ale ponieważ liczba tych koparki jest znany w czasie kompilacji, czy jest jakiś sposób mogę wygenerować tablicę (lub szablon związany lista) na czas kompilacji? Chciałbym uniknąć dynamicznej alokacji pamięci, która przychodzi z vector
.
Jestem otwarty na używanie template<>
, #define
, a nawet atrybutów specyficznych dla GCC do osiągnięcia tego celu.
[This] (http://stackoverflow.com/a/8688526/102441) wygląda potencjalnie trafnie – Eric