工具/软件: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等,我无法加以调整。
我希望有人曾经做过这件事并且可以帮助我:)
谢谢