ISR を 1 か所に書き込めるようにしたいと思います。
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 固有の属性を使用することにオープンです。