我使用http://state-machine.com的QP / C Framework和ARM Cortex-M0 CPU。
有人可以就如何在QP / C Framework中使用具有多个实例的简单HSM提供一些帮助/指导吗?
我已经构建了一个HSM(分层状态机)来管理我正在开发的定制PCB板中的物理按键按压/保持行为。 该板有四个按钮。所以我需要四个HSM实例,每个按钮一个。
我已将HSM设计为QActive对象,并将其测试为一个按钮,并且运行良好。
现在我需要调整它以接受所有按钮,但我不知道如何将我的QActive对象转换为四个实例。
此图显示了状态机图:
答案 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_myactiveobject1
,2
,3
和4
。然后在main
中为每个实例调用构造函数和QACTIVE_START
。看起来您可能需要MyActiveObject
中的成员变量将每个实例与正确的按钮相关联(我假设是GPIO引脚)。并且您将要在构造函数中分配该成员变量的值。
顺便说一句,这种抽象级别看起来很低(即四个按钮中每个按钮的Pressed和NotPressed状态)。我想知道提高抽象级别是否有意义,以便你的状态代表应用程序响应那些按钮应该做什么。然后你就会有按钮和按钮释放的事件。按钮按下事件可以具有相关数据,用于识别按下或释放四个按钮中的哪一个。