gpt4 book ai didi

使用类方法的 C++ ISR?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:11:14 26 4
gpt4 key购买 nike

是否可以使用类方法作为中断服务程序?

我有一个 ISR 编写并使用一个函数在 C 中工作:

    static void interrupt far ISR(...) {}

我尝试在 C++ 中创建一个方法(原型(prototype)):

    void interrupt far ISR(...);

然后执行:

    #pragma interrupt
void interrupt far MyClass::ISR(...) {
...
}

但是当我尝试将它与“setvect”一起使用时,我遇到了各种各样的错误:

    setvect(muint16Vector, &ISR);

我正在尝试编写一个类来为串行端口提供服务,ISR 将为来自端口的数据 Rx 提供服务。然后,ISR 将使用特定于实例的成员。

我有 3 个串口,所以我想创建该类的 3 个实例。

最佳答案

根据评论中给出的信息,这是一个可能的解决方案:

class SerialPort
{
public:
// Unrelated functions...

void isr(); // The serial interrupt handler

// Other unrelated stuff...
};

std::array<SerialPort, 3> serial_ports; // Or SerialPort serial_ports[3];

static void serial_isr(int const port_index)
{
// Common code for all serial ports that for some reason
// can't be in the class...

serial_ports[port_index].isr(); // Call actual ISR
}

extern "C" void interrupt serial_isr_1()
{
// Special code for only this serial port...

serial_isr(0);
}

extern "C" void interrupt serial_isr_2()
{
// Special code for only this serial port...

serial_isr(1);
}

extern "C" void interrupt serial_isr_3()
{
// Special code for only this serial port...

serial_isr(2);
}

关于使用类方法的 C++ ISR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41184234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com