私は基本的に全く同じ のことをするが、それぞれ異なるデバイスからの割り込みを処理する2つの割り込みサービスルーチン(ISR)を持っています(同じタイプのデバイスですが)。したがって、ロジックは同じですが、異なるCPUレジスタとメモリ位置にアクセスします。類似のISR間でコードの重複を回避するにはどうすればよいですか?
簡単な例として、次のコードを考えてみます。私は(つまり私は、ISRのにパラメータを渡すことはできませんし、関数呼び出しを避けるべきISRの に適用される制限付きコードの重複を避けることができますどのように
extern volatile unsigned int dev1_rx_buffer;
extern volatile unsigned int dev2_rx_buffer;
volatile unsigned char data;
void __attribute__((__interrupt__)) _dev1_interrupt(void)
{
/* Clear interrupt flag */
dev1.IF = 0;
if (dev1.IS_FULL) {
/* Read data from device */
data = dev1_rx_buffer;
} else {
/* do something else using registers of device 1 */
}
/* More stuff using registers of device 1 */
}
void __attribute__((__interrupt__)) _dev2_interrupt(void)
{
/* Clear interrupt flag */
dev2.IF = 0;
if (dev2.IS_FULL) {
/* Read data from device */
data = dev2_rx_buffer;
} else {
/* do something else using registers of device 2 */
}
/* More stuff using registers of device 2 */
}
をオーバーヘッドのために )。
私は2つのISRを生成するためのテンプレートを、より高いレベルのスクリプト言語を使用して作成することを考えましたが、CまたはCのプリプロセッサマクロのみを使用するソリューションを希望します。
コンパイラでは、関数呼び出しを避けるために、CommonISRを明示的にインラインで宣言する必要があります。さもなければこれはおそらく私がやることです。ありがとう。 – davitenio