是否有可能通过中断触发成员函数(比如UART上的输出)? 通常我会使用TIMER0_COMP vect但我似乎无法使用它来处理对象。
答案 0 :(得分:2)
SomeClass theObject;
// ...
ISR(USART_RX_vect)
{
theObject.someMethod();
}
这是你要找的吗?
答案 1 :(得分:2)
没有办法让中断向量指向特定的对象的成员函数。这是因为无法将* this指针直接传递给ISR。
可以让中断向量指向特定的类的成员函数,前提是它是一个返回void并且没有参数的静态函数。但是,由于它是静态函数,因此无法访问任何单个对象的非静态数据成员。
以下是来自AVR的IAR编译器和定时器中断向量的示例:
class theClass
{
public:
...
#pragma vector=TCC1_CCA_vect
__interrupt static void isrTimer1CompareA(void);
...
}
同样,这种方法的局限性在于ISR只能访问该类的静态数据。
如果您希望将中断与特定对象相关联,那么您需要的内容与H2C03建议的内容类似,即ISR知道特定对象,然后调用该对象的成员在ISR本身。