首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计时器中断中的ATMega32 C++对象

计时器中断中的ATMega32 C++对象
EN

Stack Overflow用户
提问于 2013-01-11 21:34:37
回答 2查看 1.1K关注 0票数 0

有没有可能调用一个成员函数,比如通过UART的输出,由一个中断触发?通常我会使用TIMER0_COMP向量,但是我似乎不能让它与对象一起工作。

EN

回答 2

Stack Overflow用户

发布于 2013-01-11 21:38:20

代码语言:javascript
复制
SomeClass theObject;

// ...

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

这就是你要找的吗?

票数 2
EN

Stack Overflow用户

发布于 2013-01-12 00:42:42

没有办法让中断向量指向特定对象的成员函数。这是因为无法将*this指针直接传递给ISR。

可以让中断向量指向特定的类的成员函数,前提是它是一个返回空且没有参数的静态函数。但是,因为它是一个静态函数,所以它不能访问任何单个对象的非静态数据成员。

下面是一个IAR编译器和一个来自AVR的定时器中断向量的示例:

代码语言:javascript
复制
class theClass
{
  public:
  ...

  #pragma vector=TCC1_CCA_vect
  __interrupt static void isrTimer1CompareA(void);

  ...
 }

同样,这种方法的限制是ISR只能访问类的静态数据。

如果您正在寻找与特定对象相关的中断,您将需要类似于H2C03建议的方法,即让ISR了解特定对象,然后调用ISR本身中该对象的成员。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14279286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档