有没有可能调用一个成员函数,比如通过UART的输出,由一个中断触发?通常我会使用TIMER0_COMP向量,但是我似乎不能让它与对象一起工作。
发布于 2013-01-11 21:38:20
SomeClass theObject;
// ...
ISR(USART_RX_vect)
{
theObject.someMethod();
}这就是你要找的吗?
发布于 2013-01-12 00:42:42
没有办法让中断向量指向特定对象的成员函数。这是因为无法将*this指针直接传递给ISR。
可以让中断向量指向特定的类的成员函数,前提是它是一个返回空且没有参数的静态函数。但是,因为它是一个静态函数,所以它不能访问任何单个对象的非静态数据成员。
下面是一个IAR编译器和一个来自AVR的定时器中断向量的示例:
class theClass
{
public:
...
#pragma vector=TCC1_CCA_vect
__interrupt static void isrTimer1CompareA(void);
...
}同样,这种方法的限制是ISR只能访问类的静态数据。
如果您正在寻找与特定对象相关的中断,您将需要类似于H2C03建议的方法,即让ISR了解特定对象,然后调用ISR本身中该对象的成员。
https://stackoverflow.com/questions/14279286
复制相似问题