我使用 FSM 制作了几个菜单,但界面非常笨拙。为了便于搬迁,我从编程中休息了一年,就在今晚重新编写了我的旧 FSM 代码。
可以在这里看到
我的代码的问题是,每当您更改实现时,都需要对 StateMachine 类和事件处理器进行大量返工。因为这是在嵌入式设备上,所以我不能使用 BOOST::FSM,所以我想编写自己的类,该类足够健壮,可以处理菜单和编程反对数之类的事情(例如,PIC 的 ICSP 是一个简单的 FSM)
你们会如何建议我让我的状态机更有用?
我使用 FSM 制作了几个菜单,但界面非常笨拙。为了便于搬迁,我从编程中休息了一年,就在今晚重新编写了我的旧 FSM 代码。
可以在这里看到
我的代码的问题是,每当您更改实现时,都需要对 StateMachine 类和事件处理器进行大量返工。因为这是在嵌入式设备上,所以我不能使用 BOOST::FSM,所以我想编写自己的类,该类足够健壮,可以处理菜单和编程反对数之类的事情(例如,PIC 的 ICSP 是一个简单的 FSM)
你们会如何建议我让我的状态机更有用?
如果您正在编写自己的类 - 考虑实现一个通用 FSM,然后用状态和事件填充它。
基本上这将是一个简单的接口,方法如下:
create();
addState(someState, stateFunction);
addEdge(someStateOrig, someStateDest, event);
processEvent(event);
start(startFromState);
那应该涵盖它。然后,当您创建 FSM 时 - 向其提供您的状态、到达该状态时要执行的函数以及使 FSM 从一种状态移动到另一种状态的事件。
然后,您只需在某个将成为开始状态的状态下启动 FSM,并提供事件。
如果您需要更改事件、函数或状态 - FSM 实现保持不变,您应该更改使用它的代码。
这或多或少是 Boost.FSM 给你的,但你说你不能使用它 - 所以你自己做吧:-)