从直接调用的静态方法中获取类对象指针

时间:2015-12-30 07:41:57

标签: c++ gcc cortex-m

我有以下类,例如在标题中:

class Uart
  {
  public:
    Uart (int ch, int bd = 9600, bool doinit = false);
    ......
    static void isr (void);
   }

这个想法是这个类代表USART硬件,与SPI,RTC等相同,我在运行时将静态成员 isr 的地址设置为中断向量例程。
例如像这样

extern "C"
{
  void
  Uart::isr (void)
  {
    if ( USART1->SR & USART_SR_RXNE) //receive
      {
    short c = USART2->DR;
    USART1->DR = c;
    USART1->SR &= ~USART_SR_RXNE;
    ;
      }
    else if ( USART1->SR & USART_SR_TC) //transfer
      {
    USART1->SR &= ~USART_SR_TC;
      }
  }
}

并将其设置为中断向量,例如

_vectors_[USART1_IRQn + IRQ0_EX] = (word) &dbgout.isr;

因此,每当这个“回调”例程被CPU调用时,我希望能够以用户友好的方式访问它的“父”对象以保存和/或操纵接收的数据。
有可能吗?也许以某种方式组织班级或其他什么 该架构严格为32位(ARM,gcc)

1 个答案:

答案 0 :(得分:1)

静态方法对该对象一无所知。

您需要采用不同的方法:

// Create interrupt handler method (non-static!)
void Uart::inthandler() {
    // whatever is needed here
}

// Create object
Uart* p = new Uart(...);

// Create interrupt handler function
void inthandler() {
    if (p != NULL) {
        p->inthandler();
    }
}

// Install the interrupt handler function
InstallIntHandler(IRQ, inthandler);

这只是一个必须适应您特定环境的原则。