如何在QP / C中使用相同HSM的多个实例?

时间:2014-06-24 17:29:50

标签: state-machine

我使用http://state-machine.com的QP / C Framework和ARM Cortex-M0 CPU。

有人可以就如何在QP / C Framework中使用具有多个实例的简单HSM提供一些帮助/指导吗?

我已经构建了一个HSM(分层状态机)来管理我正在开发的定制PCB板中的物理按键按压/保持行为。 该板有四个按钮。所以我需要四个HSM实例,每个按钮一个。

我已将HSM设计为QActive对象,并将其测试为一个按钮,并且运行良好。

现在我需要调整它以接受所有按钮,但我不知道如何将我的QActive对象转换为四个实例。

此图显示了状态机图: enter image description here

1 个答案:

答案 0 :(得分:3)

您可能已经有一些看起来像这样的代码:

typedef struct MyActiveObjectTag {
    QActive super;
    ...
} MyActiveObject;

...

static MyActiveObject l_myactiveobject;   /* Declare an instance */

...

int main(int argc, char *argv[]) {
    ...
    /* instantiate and start the active objects... */
    MyActiveObject_ctor(&l_myactiveobject);
    QACTIVE_START(&l_myactiveobject, ...
    ...
}

所以我相信你只想重复声明行来宣告l_myactiveobject1234。然后在main中为每个实例调用构造函数和QACTIVE_START。看起来您可能需要MyActiveObject中的成员变量将每个实例与正确的按钮相关联(我假设是GPIO引脚)。并且您将要在构造函数中分配该成员变量的值。

顺便说一句,这种抽象级别看起来很低(即四个按钮中每个按钮的Pressed和NotPressed状态)。我想知道提高抽象级别是否有意义,以便你的状态代表应用程序响应那些按钮应该做什么。然后你就会有按钮和按钮释放的事件。按钮按下事件可以具有相关数据,用于识别按下或释放四个按钮中的哪一个。