是否有可能调用成员函数,例如通过 UART 的输出,以由中断触发?通常我会使用 TIMER0_COMP vect,但我似乎无法让它与对象一起使用。
问问题
1127 次
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 回答