This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320F2.8062万:将中断例程用作类方法

Guru**** 2539500 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/654107/compiler-tms320f28062-using-interrupt-routines-as-class-methods

部件号:TMS320F2.8062万

工具/软件:TI C/C++编译器

您好,  

在我正在处理一个非常大的项目的那一刻,为了使编程尽可能干净,我使用的是C++。

但现在我陷入了一个相当复杂的阶段(至少对我来说)。 我希望中断例程成为类本身的一部分。 我n`t,这不适用于方法的简单函数指针,因为Object总是传递"this "指针,ISR例程没有参数。 n`t将函数声明为静态,我可以使其正常工作,但这不会隐藏类中的ISR例程,也不能使用任何形式的多态。

我会尽量解释我希望达到的目标。

假设我有一个称为"车辆"的基本类和两个子类"汽车"和"自行车"。 这两个子类都需要一个名为“break ()”的ISR例程(我知道“break”是一个关键字,这只是一个示例),该例程在您点击Break时触发(如外部Pin中断)。 这两个子类都必须实现此函数,因为中断是一种多任务。 因此,我将Base类提取为强制子类实现其自身版本的Break。

使用的车辆在运行时确定。 因此我的代码将像这样实例化车辆:“Vehicle myVehicle = new car ();  or  vehicle = new bike ()”

这样,我的代码的其余部分将完全一样,因为我可以做一些类似的事情:myVehicle.go ()或myVehicle.turnOnTheLight();每个对象都有自己实现的函数版本。

现在的问题是:

如何使类方法成为可中断的方法?  

所以我可以写:PieVectorTable.XINT1 =&myVehicle.break();

我已找到此链接  

http://processors.wiki.ti.com/index.php/Invoke_a_C%2B%2B_Class_Member_Function_from_an_Interrupt

但它只是告诉我如何呼叫ISR例程中某个函数的成员。 我还找到了一些我正在努力实现的设计模式,但这些模式都适用于其他MCU系列,如Atmel等,我无法加以调整。

我希望有人曾经做过这件事并且可以帮助我:)

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Olovskos"]

    如何使类方法成为可中断的方法?  

    所以我可以写:PieVectorTable.XINT1 =&myVehicle.break();

    [/引述]

    这不受支持。  无法避免的问题是,函数中断需要参数,即调用该参数的成员对象的地址。  此地址分配给"This (此)"指针。  但中断函数不能使用任何参数,也不能返回任何结果。   

    谢谢,此致,

    -George