0

是否有可能调用成员函数,例如通过 UART 的输出,以由中断触发?通常我会使用 TIMER0_COMP vect,但我似乎无法让它与对象一起使用。

4

2 回答 2

2
SomeClass theObject;

// ...

ISR(USART_RX_vect)
{
   theObject.someMethod();
}

这是你要找的吗?

于 2013-01-11T13:38:20.427 回答
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 回答