私はプロジェクトを行っており、過去のプロジェクトを使用して、特定のことを行う方法についてアイデアを得ることができます。無意識にコピーしているわけではありませんが、本にないものがたくさんあることに注意してください。とにかく、ここに私が理解できないマクロがあります:
#define PREPAREENTRY(numIVT,oldINT) \
void interrupt int##numIVT(...){\
IVTEntry::entries[##numIVT]->signalAll();\
if (oldINT) IVTEntry::entries[##numIVT]->callOld();}\
IVTEntry entry##numIVT(##numIVT,int##numIVT);
#endif
完全にはわかりませんが、ほとんどのコツをつかんだと思います。したがって、PREPAREENTRY は、numIVT (IV テーブルの数値) と OldNT (古い割り込み) の 2 つの値を取得します。
次に、番号 numIVT という名前の割り込み関数を作成します。これは、後で特定の割り込みの割り込み関数として設定できます。つまり、その割り込みが発生したときに何が起こるかを指定できます。
新しい割り込み関数は、numIVT に応じて、オブジェクトの配列から特定のオブジェクトの signalAll() を呼び出します。次に、古い割り込み関数を呼び出す必要があるかどうかを確認し、呼び出すかどうかを確認します。
これで、新しい割り込み関数は終了です。
しかし、#endif の前の行は何をするのでしょうか? 私はプロジェクト全体を見てきましたが、答えが見つかりません。ブレーンストーミング中にこのプロジェクトを見る前に、これに似たものを考えましたが、最後の行はありません.
私がぶら下がったと思う部分について誰かが私が正しいか間違っているかを教えてくれたら、そして誰かがこの不思議な線が何をするのか教えてくれたら、それは大歓迎です.