割り込みによってトリガーされるメンバー関数、たとえば UART 経由の出力を呼び出す可能性はありますか? 通常、私は TIMER0_COMP vect を使用していたでしょうが、それをオブジェクトで動作させることができないようです。
質問する
1127 次
2 に答える
2
割り込みベクタが特定のオブジェクトのメンバー関数を指すようにする方法はありません。これは、*thisポインタをISRに直接渡すことができないためです。
割り込みベクトルが特定のクラスのメンバー関数を指すようにすることは可能です。ただし、それがvoidを返し、パラメーターを持たない静的関数である場合に限ります。ただし、これは静的関数であるため、個々のオブジェクトの非静的データメンバーにはアクセスできません。
IARコンパイラとAVRからのタイマー割り込みベクトルの例を次に示します。
class theClass
{
public:
...
#pragma vector=TCC1_CCA_vect
__interrupt static void isrTimer1CompareA(void);
...
}
この場合も、このアプローチの制限は、ISRがクラスの静的データにしかアクセスできないことです。
特定のオブジェクトに関連する割り込みを探している場合は、H2C03が推奨するものに沿った何かが必要になります。これは、ISRに特定のオブジェクトについて認識させ、ISRでそのオブジェクトのメンバーを呼び出すことです。自体。
于 2013-01-11T16:42:41.907 に答える
2
SomeClass theObject;
// ...
ISR(USART_RX_vect)
{
theObject.someMethod();
}
これはあなたが探しているものですか?
于 2013-01-11T13:38:20.427 に答える